Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

остановить таймер


DIS ©   (2004-10-16 21:12:00) 

мастера подскажите есть файл я делаю перенос строк из одного файла в другой по таймеру
Timer1.enabled :=true; (по умолчанию выключен чтобы выкл ставим false)
а как узнать, что все строки кончились и остановить таймер.
С уважением, Дмитрий.


DIS   (2004-10-17 13:18:00) [1]

Предложенный вами способ намного лучше и работает гораздо быстрее. Всем спасибо.


Добрый дядька   (2004-10-17 02:39:00) [2]


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;


Defunct   (2004-10-17 01:33:00) [3]

[16]
Перед этой строчкой

> WriteLn(F2, DestS);

сделайте нормирование строки (заменяйте '#1' на '[', и '#2' на ']')


Defunct   (2004-10-17 01:27:00) [4]

> 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;


DIS   (2004-10-17 00:34:00) [5]

исходный
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]=" текст текст."

в результате получаем.


panov   (2004-10-17 00:17:00) [6]

>DIS   (17.10.04 00:08) [11]

Но ведь мало того, ЧТО ты хочешь сделать с данными.
Приведи пример этих исходных данных, и к какому виду хочешь преобразовать.


DIS   (2004-10-17 00:12:00) [7]

сорри два раза нажал


DIS   (2004-10-17 00:10:00) [8]

Удалено модератором
Примечание: Дубль


DIS   (2004-10-17 00:08:00) [9]

Если из далека то после кривого экспорта из базы данных 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://www.delphimaster.ru/cgi-bin/forum.pl?id=1097165752&n=0
тогда идей не было.


panov   (2004-10-16 22:12:00) [10]

>DIS   (16.10.04 21:12)

Опиши задачу полностью(для этого куска кода, т.е. что ты хочешь сделать словами.


Defunct   (2004-10-16 21:44:00) [11]

begin...end ©   (16.10.04 21:36) [8]
Браво! я даже и не заметил, такой откровенной глупости в коде.

Похоже автору стоит сперва стоит задать вопрос, как работать с текстовыми файлами.


begin...end   (2004-10-16 21:36:00) [12]


> Read( Vf1 );   // читаем '00.PRN'

Поясни глубокий смысл этой конструкции...

P.S. Что-то ты мне начинаешь не нравиться...


Defunct   (2004-10-16 21:34:00) [13]

Жуть какая-то..
Сделайте поток, с приоритетом tpIdle для переноса строк.


DIS   (2004-10-16 21:29:00) [14]


>
>   Read( Vf1 );   // читаем '00.PRN'

читаем

> SaveToFile(ChangeFileExt(FileName, '.txt'));
> fileName := 'work2.txt';

пишем
время в настрой таймера


begin...end   (2004-10-16 21:27:00) [15]

Ну и где здесь чтение однойстроки с интервалом в 1 секунду?


DIS   (2004-10-16 21:23:00) [16]

выполняю таким запутанным образом

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:22:00) [17]

Может быть, тебе поможет функция EOF() ?


DIS   (2004-10-16 21:21:00) [18]

выполняется процедура вырезания одной строки из 1 файла и вставляется во 2 файл. по таймеру с интервалом 1


begin...end   (2004-10-16 21:15:00) [19]


> мастера подскажите есть файл я делаю перенос строк из одного
> файла в другой по таймеру

Как это?


Наверх

Титульная страница Поиск, карта сайта Написать письмо