Чтение данных из файла CSV один за другим C #

На месте (без дополнительного хранилища). Нет строкового копирования (кроме списка результатов). Один сорт + один проход:

#include <string>
#include <vector>
#include <list>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
        vector<string> vec{"words", "words", "are", "fun", "fun"};
        list<string> dup;

        sort(vec.begin(), vec.end());

        const string  empty{""};
        const string* prev_p = &empty;

        for(const string& s: vec) {
                if (*prev_p==s) dup.push_back(s);
                prev_p = &s;
        }

        for(auto& w: dup) cout << w << ' '; 
        cout << '\n';
}
-1
задан Servasius Rinta 17 January 2019 в 08:58
поделиться

4 ответа

Прочитайте и сохраните информацию:

В этой части я не буду пропагандировать какую-либо библиотеку третьей части, которая будет просто читать и писать CSV. Как CSV Helper. Потому что очевидно, что вы должны его использовать.

var fileName = "input.txt";
var lines = File.ReadAllLines(fileName);//.Skip(1) // if you have an header.
var rawData = lines.Select(line => line.Split(';'))
                    .Select(item =>
                    {
                         Decimal lon, lat;
                         return new
                         {
                             date = DateTime.Parse(item[0]),
                             Lon = Decimal.TryParse(item[1], out lon) ? lon : 0,
                             Lat = Decimal.TryParse(item[2], out lat) ? lat : 0,
                         };
                     });

Decimal.TryParse(item[1], out lon) ? lon : 0 - это короткий путь к TryParse входу и присвоению ему значения по умолчанию в случае сбоя.

На данный момент у вас есть список пользовательских объектов, который является точными данными, которые вы имели в файле. Чтение закончено, вы можете начать работать над ним. Чтобы знать, сколько задержки должна иметь каждая точка, нам нужно вычесть ее с первой датой-временем.

var referenceDate = rawData.Select(x => x.date).First();
var usefullData = rawData.Select(x =>
                         new
                         {
                             Delay = (x.date - referenceDate),
                             x.Lon,
                             x.Lat,
                         });

Теперь у нас есть полезные данные, задержка - это интервал времени, вы можете выразить его значение в нужной вам единице измерения. doc

Поскольку у нас нет информации о том, как вы будете отображать точку на карте, я буду предполагать, что: Когда пользователь отображает карту, вы должны рассчитать время, когда должна появиться каждая точка.

var readingTime = DateTime.Today.AddHours(19);
var displayData = usefullData.Select(x =>
                                new
                                {
                                    Date = readingTime + x.Delay,
                                    x.Lon,
                                    x.Lat,
                                });
0
ответ дан Drag and Drop 17 January 2019 в 08:58
поделиться

Да, вы можете сделать это.

По сути, у вас есть данные в CSV, вы можете написать API для чтения данных из csv и возврата объекта json. Вы можете сделать это, написав asp.net api.

Вот как читать CSV-файл на asp.net http://oniwebblog.blogspot.com/2016/01/aspnet-mvc-web-application-how-to-read_31.html [ 115]

Вот ссылка на сборку .net web api Написать веб-API

На стороне клиента вы можете использовать jquery для вызова API и получения данных json.

Теперь для построения местоположения можно использовать API Google для загрузки карты и рисования точек.

Вот как вы можете нарисовать значок на карте Google

В javascript вы можете использовать функцию setTimeout для вызова определенной функции через определенный интервал.

0
ответ дан Krunal Parmar 17 January 2019 в 08:58
поделиться

Есть несколько шагов, которые нужно предпринять, однако я остановлюсь только на первом. Преобразование результатов файла в некоторую структуру, которую вы можете использовать.

Остальное зависит от вас (и только для болезненных академических целей), вам нужно выбрать собственное приключение

Учитывая

public readonly struct Location
{
   public DateTime TimeStamp { get; }
   public Decimal Lat { get; }
   public Decimal Lon { get; }

   public Location(DateTime timeStamp, decimal lat, decimal lon)
   {
      TimeStamp = timeStamp;
      Lat = lat;
      Lon = lon;
   }
}

Метод для преобразования

public static Location ConvertToLocation(string input)
{
   var split = input.Split(';');
   return new Location(DateTime.Parse(split[0]),decimal.Parse(split[1]),decimal.Parse(split[2]));
}

Использование

// List of locations
var results = File.ReadLines("SomeFileName").Select(ConvertToLocation);
0
ответ дан Michael Randall 17 January 2019 в 08:58
поделиться

Вы можете прочитать файл .csv с помощью потокового считывателя и разделить столбцы с помощью функции split (";"), определяя точку с запятой как разделитель каждой строки. После этого вы можете сохранять данные в arrayList или в таблицу базы данных в соответствии со столбцом.

List<string> lattitude=new List<string>();
List<string> longitude=new List<string>();
List<string> timestamp=new List<string();
using (var rd = new StreamReader("yourfile.csv"))
{
    while (!rd.EndOfStream)
    {
        var arrlst= rd.ReadLine().Split(';');
        timestamp.add(arrlst[0])
        lattitude.Add(arrlst[1]);
        longitude.Add(arrlst[2]);
    }
}

Теперь вы можете использовать Timepicker для подсчета секунд, используя счетчик для отслеживания каждые 13 секунд. [Вы можете получить интервал секунд, получая разницу смежных времен от отметки времени] всякий раз, когда счетчик считает до 13, то снова запустите счетчик с 0. Вы будете выполнять вышеуказанные шаги, пока все данные в нужном списке не будут прочитаны. когда все данные прочитаны, вы можете остановить таймер, вызывая логику. Это способ получения данных из необходимого списка по одному в соответствии со значением метки времени и в соответствии с вашими потребностями.

Тема: создайте несколько тем с помощью новой темы (). запускайте потоки, основываясь на ваших интервалах.

Надеюсь, это поможет. Благодаря

0
ответ дан Rashedul.Rubel 17 January 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: