Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.205.5.65] |
|
Сообщ.
#1
,
|
|
|
В этом коде out of memory. Не могу понять как сделать чтение по строчкам?.
var All, f1, f2, f3: TStringList; i: integer; begin All := TStringList.Create; f1 := TStringList.Create; f2 := TStringList.Create; f3 := TStringList.Create; All.LoadFromFile(OpenDialog1.FileName); for i := 0 to All.Count - 1 do begin if CheckBox1.Checked then begin if Pos(Edit1.Text, All.Strings[i]) > 0 then f1.Add(All.Strings[i]); end; if CheckBox2.Checked then begin if Pos(Edit2.Text, All.Strings[i]) > 0 then f2.Add(All.Strings[i]); end; if CheckBox3.Checked then begin if Pos(Edit3.Text, All.Strings[i]) > 0 then f3.Add(All.Strings[i]); end; end; All.Free; if CheckBox1.Checked then begin f1.SaveToFile('Organization.txt'); end; if CheckBox2.Checked then begin f2.SaveToFile('Working.txt'); end; if CheckBox3.Checked then begin f3.SaveToFile('Types.txt'); end; f1.Free; |
Сообщ.
#2
,
|
|
|
Схема как-то так:
begin fp := fopen( OpenDialog1.FileName, 'r'); // для чтения fpO := fopen( Organization.txt, 'w'); // для записи do begin flag := ReadLn( fp, str); if( flag ) then begin if Pos (Edit1.Text, str) then WriteLn( fpO, str); end; while( flag ); Добавлено Так ещё точнее, но я не помню как в Паскале открыть файл для записи: var FileName, Edit1Text, str: String; LFile, LFileO: TextFile; begin FileName := 'test.txt'; Edit1Text := 'WRK'; AssignFile( LFile, FileName); // для чтения Reset( LFile ); AssignFile( LFileO, 'Organization.txt'); // для записи // Reset( LFileO ); while not EOF(LFile) do begin ReadLn( LFile, str); if Pos(Edit1Text, str)>0 then WriteLn( LFileO, str); // тут ошибка выскакивает end; //until( not Eof(LFile) ); CloseFile( LFile ); end. |
Сообщ.
#3
,
|
|
|
Славян
>как в Паскале открыть файл для записи: Rewrite Kirilis2018 Какого объёма файлы? Не по теме переполнения памяти, а по скорости - если строк много, то обязательно сделать вот что: убрать обращения к контролам внутри цикла - для этого прочитать свойства в переменные до цикла и внутри его использовать переменные. Это относится к checkbox.checked и к edit.text |
Сообщ.
#4
,
|
|
|
MBo
Славян Спасибо большое по вашим рекомендациям - вопрос решил. |
Сообщ.
#5
,
|
|
|
В современных версиях Delphi (не скажу, было ли в XE) можно также использовать TStreamReader (правда, жалуются на его скорость)
http://docwiki.embarcadero.com/Libraries/T...Reader.ReadLine |