Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Внизостановить таймер Найти похожие ветки
← →
DIS (2004-10-16 21:12) [0]мастера подскажите есть файл я делаю перенос строк из одного файла в другой по таймеру
Timer1.enabled :=true; (по умолчанию выключен чтобы выкл ставим false)
а как узнать, что все строки кончились и остановить таймер.
С уважением, Дмитрий.
← →
begin...end © (2004-10-16 21:15) [1]
> мастера подскажите есть файл я делаю перенос строк из одного
> файла в другой по таймеру
Как это?
← →
DIS (2004-10-16 21:21) [2]выполняется процедура вырезания одной строки из 1 файла и вставляется во 2 файл. по таймеру с интервалом 1
← →
begin...end © (2004-10-16 21:22) [3]Может быть, тебе поможет функция EOF() ?
← →
DIS (2004-10-16 21:23) [4]выполняю таким запутанным образом
procedure TForm1.Timer1Timer(Sender: TObject);
var
Vf1, Vf2, temp: TextFile;
i, deletestring, FileName, j, s : string;
start : boolean;
Flags: TReplaceFlags;
begin
AssignFile( Vf1, "00.PRN" );
Read( Vf1 ); // читаем "00.PRN"
AssignFile( Vf2, "work2.txt" );
Append( Vf2 ); // открывает файл "work2.txt"
AssignFile( Temp, "worktemp.txt" );
rewrite( temp );
Reset( Vf1); { устанавливает указатель файла "00.PRN" в начало файла}
Start := False;
while not SeekEof(Vf1) do
begin //цикл, пока не достигнут конец файла
Readln(Vf1, i);
if Pos("slov1 ", i) > 0 then
Start := True
else if Pos("slov2", i) > 0 then
Break
else if Start then
Flags:= [ rfReplaceAll, rfIgnoreCase ];
i:= StringReplace( i, ""#13#10, "", Flags);
i:= StringReplace( i, "_", ""+chr(32)+"", Flags);
i:= StringReplace( i, "#1", "[", Flags);
i:= StringReplace( i, "#2", "]", Flags);
i:= StringReplace( i, "slov1", "", Flags);
i:= StringReplace( i, "_", ""+chr(32)+"", Flags);
i:= StringReplace( i, "_", ""+chr(32)+"", Flags);
i:= StringReplace( i, "endstring", ""#13#10, Flags);
memo2.text := i;
Write( Vf2, i );
Writeln( temp, i );
end;
CloseFile( Vf1 );
CloseFile( Vf2 );
CloseFile( temp );
FileName := "worktemp.txt" ; //читаем файл отсортированный
with Form1.Memo2.Lines do begin
LoadFromFile(FileName); // загружаем в мемо
S:= ""+memo2.text+"";
with Form1.Memo2.Lines do begin
SaveToFile(ChangeFileExt(FileName, ".txt"));
fileName := "work2.txt"; end
//присваеваем переменной значение поля мемо
end;
FileName := "00.prn" ; //читаем файл отсортированный
with Form1.Memo1.Lines do begin
LoadFromFile(FileName); // загружаем в мемо
i := memo1.Text; //присваеваем переменной значение поля мемо
end;
i := memo1.text; // из поля мемо1 удаляем колличество знаков мемо2 причем
delete(i, Pos("slov1", i), length (s)+17); //в мемо1 уже должен быть загружен текст и мы не сохраняем результат
Memo1.Text := i;
with Form1.Memo1.Lines do begin
SaveToFile(ChangeFileExt(FileName, ".prn"));
fileName := "00.prn"; end;
FileName := "work2.txt" ; //читаем файл отсортированный
with Form1.Memo3.Lines do begin
LoadFromFile(FileName); // загружаем в мемо
S:= ""+memo3.text+"";
Flags:= [ rfReplaceAll, rfIgnoreCase ];
S:= StringReplace( s, "_", ""+chr(32)+"", Flags);
memo3.text := s;
with Form1.Memo3.Lines do begin
SaveToFile(ChangeFileExt(FileName, ".txt"));
fileName := "work2.txt";
end;
end;
end;
← →
begin...end © (2004-10-16 21:27) [5]Ну и где здесь чтение одной строки с интервалом в 1 секунду?
← →
DIS (2004-10-16 21:29) [6]
>
> Read( Vf1 ); // читаем "00.PRN"
читаем
> SaveToFile(ChangeFileExt(FileName, ".txt"));
> fileName := "work2.txt";
пишем
время в настрой таймера
← →
Defunct © (2004-10-16 21:34) [7]Жуть какая-то..
Сделайте поток, с приоритетом tpIdle для переноса строк.
← →
begin...end © (2004-10-16 21:36) [8]
> Read( Vf1 ); // читаем "00.PRN"
Поясни глубокий смысл этой конструкции...
P.S. Что-то ты мне начинаешь не нравиться...
← →
Defunct © (2004-10-16 21:44) [9]begin...end © (16.10.04 21:36) [8]
Браво! я даже и не заметил, такой откровенной глупости в коде.
Похоже автору стоит сперва стоит задать вопрос, как работать с текстовыми файлами.
← →
panov © (2004-10-16 22:12) [10]>DIS (16.10.04 21:12)
Опиши задачу полностью(для этого куска кода, т.е. что ты хочешь сделать словами.
← →
DIS (2004-10-17 00:08) [11]Если из далека то после кривого экспорта из базы данных fastreport (причем кривой именно экспорт, админ на сайте признал что это бага фаста, и когда ее починят неизвестно), получаем текстовый файл который разбивает строки на отрезки, что крайне не допустимо для моих задач. Пришлось помечать начало строки словом slovo1 и конец slovo2, между этими словами убиваем знак окончания строки #13#10, и попутно делаю еще кое - какие изменения.
> while not SeekEof(Vf1) do
> begin //цикл, пока не достигнут конец файла
> Readln(Vf1, i);
> if Pos("slov1 ", i) > 0 then
> Start := True
> else if Pos("slov2", i) > 0 then
> Break
> else if Start then
> Flags:= [ rfReplaceAll, rfIgnoreCase ];
потом удаляем прочитанную запись и пишем в файл work2, таймер нужен для того чтобы не нажимать каждый раз на кнопку, конечно может кривоват мой код, но для моих задач он подходит, если хотите то напишите свой вариант, хотя я тут у вас уже спрашивал по этому поводу
http://delphimaster.net/view/1-1097165752/
тогда идей не было.
← →
DIS (2004-10-17 00:10) [12]Удалено модератором
Примечание: Дубль
← →
DIS (2004-10-17 00:12) [13]сорри два раза нажал
← →
panov © (2004-10-17 00:17) [14]>DIS (17.10.04 00:08) [11]
Но ведь мало того, ЧТО ты хочешь сделать с данными.
Приведи пример этих исходных данных, и к какому виду хочешь преобразовать.
← →
DIS (2004-10-17 00:34) [15]исходный
slov1_
arraycount+=1endstring
slov2_
slov1_
namesArray#1arraycount#2="тут находится
текст"
endstring
slov2_
slov1_
urlsArray#1arraycount#2="incras.del"endstring
slov2_
slov1_
descArray#1arraycount#2=" текст
текст."
endstring
slov2_
конечный
arraycount+=1
namesArray[arraycount]=" тут находится текст"
urlsArray[arraycount]="incras.del"
descArray[arraycount]=" текст текст."
в результате получаем.
← →
Defunct © (2004-10-17 01:27) [16]> DIS (17.10.04 00:34) [15]
Запускайте это в потоке с приоритетом tpIdle.procedure Normalize(SourceFile, DestFile: String);
var F1, F2 : TextFile;
S, DestS : String;
Begin
AssignFile(F1, SourceFile);
AssignFile(F2, DestFile);
Reset(F1);
ReWrite(F2);
While Not Eof(F1) Do
Begin
ReadLn(F1, S);
DestS := "";
If S="slov1_" Then
Repeat
ReadLn(F1, S);
If (S<>"slov2_") and (S<>"endstring") Then DestS := DestS + S;
Until Eof(F1) or (S="slov2_");
WriteLn(F2, DestS);
End;
CloseFile(F1);
CloseFile(F2);
End;
← →
Defunct © (2004-10-17 01:33) [17][16]
Перед этой строчкой> WriteLn(F2, DestS);
сделайте нормирование строки (заменяйте "#1" на "[", и "#2" на "]")
← →
Добрый дядька (2004-10-17 02:39) [18]
function Normalize(const aSrc,aDest: String): Integer;
var
fSrc,fDest: TextFile;
sr,sw: String;
pz: Integer;
begin
Result := 0;
AssignFile(fSrc,aSrc);
AssignFile(fDest, aDest);
Reset(fSrc);
Rewrite(fDest);
sw := "";
while not Eof(fSrc) do
begin
ReadLn(fSrc,sr);
if sr="slov1_" then Continue;
if sr="slov2_" then Continue;
if sr="" then Continue;
pz := Pos("endstring",sr);
if pz>0 then
begin
sr := Copy(sr,1,pz-1);
sw := sw+sr;
sw := StringReplace(sw,"#1","[",[rfReplaceAll]);
sw := StringReplace(sw,"#2","]",[rfReplaceAll]);
WriteLn(fDest,sw);
sw := "";
Inc(Result);
Continue;
end;
sw := sw+sr;
end;
if sw<>"" then WriteLn(fDest,sw);
CloseFile(fSrc);
CloseFile(fDest);
end;
← →
DIS (2004-10-17 13:18) [19]Предложенный вами способ намного лучше и работает гораздо быстрее. Всем спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.032 c