Re: Чтение данных из большого текстового файла
А это еще зачем..?
My Visual Database → Russian → Чтение данных из большого текстового файла
А это еще зачем..?
sibprogsistem wrote:А это еще зачем..?
как я понял Вы пытаетесь загрузить целиком огромный файл
но так любая программа будет тормозить
в общем проверял на файле 203000 строк, работает..
for i :=0 to CSV.LineCount - 1 do
begin
Application.ProcessMessages;
sleep(300);
Form1.Memo1.Text:= Form1.Memo1.Text+CSV.Fields[i, 0] ;
end;
CSV.Free;
Речь об искажении байт, а вы про тормоза...
А про Application.ProcessMessages все в курсе.
Вполне жизнеспособный вариант:
procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
FSO, f : variant;
str :string;
begin
FSO := CreateOleObject('Scripting.FileSystemObject');
f := FSO.OpenTextFile('D:\1.txt', 1);
While Not f.AtEndOfStream do
begin
str := f.Read(5000);
ShowMessage(str);
str:='';
end;
f.Close;
end;
begin
end.
Читает без проблем кусками указанное количество символов. Пробовал на файле в 400 Мб, памяти сожрал максимум 12 Мб, выдал символы без искажения.
FSO := CreateOleObject('Scripting.FileSystemObject');
MS Office должен быть установлен, верно?
Посмотрел в описании VB, вроде можно построчно читать:
ts := f.OpenAsTextStream(ForReading, TristateUseDefault);
s := ts.ReadLine;
Осталось найти значения констант ))))
k245 wrote:Решение, подсказанное Дмитрием: использовать класс TCSV
procedure Form1_Button9_OnClick (Sender: TObject; var Cancel: boolean); var FileName: string; CSV: TCSV; i: integer; begin FileName := ExtractFilePath( Application.ExeName ) + 'test.txt'; CSV := TCSV.Create; CSV.FieldSeparator := chr(0); CSV.LoadANSIFile(FileName); for i :=0 to CSV.LineCount - 1 do begin ShowMessage( CSV.Fields[i, 0] ); end; CSV.Free; end;
Протестировал на файле размером 330 Мб, открывается и читает построчно.
Увы.... тоже не работает, если убрать ShowMessage()...... Печалька
В итоге код заработал, но не понятно, что было причиной проблемы... сделал присваивание текстовым переменным, считываю сразу всю строку - стало всё ОК:
tmpWord := Trim( CSV.Fields[i, 0] );
гружу в базу словари ( Хаген, Ожегов, Евремова ). Чуть позже опубликую результат.
My Visual Database → Russian → Чтение данных из большого текстового файла
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi