Прошу помочь с парсингом CSV

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Re: Прошу помочь с парсингом CSV

Сообщение Vadim » 18.07.2018 11:34:50

SkinnerDE писал(а):И кстати, по поводу кода. Мне кажется можно обойтись только двумя TStringList.
Из первого (исходный файл) вычитать заголовки и освободить, а второй (только с данными) сохранить и передать в TSDFDataSet.

Это уж Вы сами решите исходя из требований момента. Я же ориентировался, что Вам нужно сохранить где-то и заголовки и данные.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Прошу помочь с парсингом CSV

Сообщение SkinnerDE » 18.07.2018 11:55:52

Vadim
Вы не могли бы показать код из вашего примера в этом посте?
Vadim писал(а):В таком случае удалите из файлов все строки кроме тех, что начинаются с "UNIT" и "DATA". Их будет отлично и без малейших проблем открывать стандартный компонент TSdfDataSet (вкладка DataAccess).
SkinnerDE
новенький
 
Сообщения: 11
Зарегистрирован: 13.07.2018 12:01:55

Re: Прошу помочь с парсингом CSV

Сообщение Vadim » 18.07.2018 12:36:06

SkinnerDE писал(а):Вы не могли бы показать код из вашего примера в этом посте?

Я Вам его показал. Вы видели и удивились, как просто. Или Вы что-то другое имели в виду?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Прошу помочь с парсингом CSV

Сообщение SkinnerDE » 18.07.2018 14:36:05

Vadim
У меня получилось не то, что у Вас. Но, видимо, это я что-то не так делаю с фтп.
SkinnerDE
новенький
 
Сообщения: 11
Зарегистрирован: 13.07.2018 12:01:55

Re: Прошу помочь с парсингом CSV

Сообщение Vadim » 18.07.2018 14:49:33

SkinnerDE
1. Скачиваете файл с ФТП и сохраняете его у себя на диске в виде текстового файла;
2. Разделяете содержимое этого файла на два:
-- со строками где есть "UNIT" и "DATA" - в файл "data.csv";
-- с остальными строками - в файл "остальное.csv". Этот файл пока нас не интересует;
3. Кидаете на форму компонент "TSdfDataSet" (вкладка DataAccess);
4. У этого компонента пишете в свойстве FileName = data.csv;
5. Чтобы в заголовках столбцов были названия из строки UNIT, поставить свойство FirstLineAsSchema = True:
6. После этого у Вас будет самый обычный DataSet, делаете с ним то, что нужно.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Прошу помочь с парсингом CSV

Сообщение SkinnerDE » 18.07.2018 15:12:58

Vadim
Я так и сделал.
Код: Выделить всё
     s:=FTPSend.FtpList[ListView1.Selected.Index-1].FileName;
            ........
         stCsv1.Clear;
         stCsv2.Clear;
         if Form1.FTPSend.RetrieveFile(s,true) then
           stCsv1.LoadFromStream(Form1.FTPSend.DataStream) else exit;
         stCsv2:=TStringList.Create;
         for i:=0 to stCsv1.Count-1 do
         if (Pos('UNIT', stCsv1[i])>0) or (Pos('DATA', stCsv1[i])>0) then stCsv2.Add(stCsv1[i]);
         temp:='tmp'+FormatDateTime('hhmmss',Time);
           Memo1.Lines.Add('temp: '+temp);
         stCsv2.SaveToFile(temp);
         if FileExists(temp) then Memo1.Lines.Add('Created');
         DBGrid1.Clear;
         SdfDataSet1.Active:=false;
         SdfDataSet1.FileName:=temp;
         SdfDataSet1.Active:=true; ////////

Проблема была все-таки в FTPSend.
Спасибо, всё работает.
SkinnerDE
новенький
 
Сообщения: 11
Зарегистрирован: 13.07.2018 12:01:55

Пред.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru