SkinnerDE писал(а):И кстати, по поводу кода. Мне кажется можно обойтись только двумя TStringList. Из первого (исходный файл) вычитать заголовки и освободить, а второй (только с данными) сохранить и передать в TSDFDataSet.
Это уж Вы сами решите исходя из требований момента. Я же ориентировался, что Вам нужно сохранить где-то и заголовки и данные.
Vadim Вы не могли бы показать код из вашего примера в этом посте?
Vadim писал(а):В таком случае удалите из файлов все строки кроме тех, что начинаются с "UNIT" и "DATA". Их будет отлично и без малейших проблем открывать стандартный компонент TSdfDataSet (вкладка DataAccess).
SkinnerDE 1. Скачиваете файл с ФТП и сохраняете его у себя на диске в виде текстового файла; 2. Разделяете содержимое этого файла на два: -- со строками где есть "UNIT" и "DATA" - в файл "data.csv"; -- с остальными строками - в файл "остальное.csv". Этот файл пока нас не интересует; 3. Кидаете на форму компонент "TSdfDataSet" (вкладка DataAccess); 4. У этого компонента пишете в свойстве FileName = data.csv; 5. Чтобы в заголовках столбцов были названия из строки UNIT, поставить свойство FirstLineAsSchema = True: 6. После этого у Вас будет самый обычный DataSet, делаете с ним то, что нужно.
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. Спасибо, всё работает.