Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
1-1097930629
Новичек
2004-10-16 16:43
2004.10.31
Функция GetProcessID


1-1097916010
Merfi
2004-10-16 12:40
2004.10.31
Изменение длины переменной типа string во время работы


14-1097204040
КаПиБаРа
2004-10-08 06:54
2004.10.31
Где хранить инфу о версии (формате) базы


1-1098121425
focor
2004-10-18 21:43
2004.10.31
HTMLtoFILE


1-1097654097
Pentium133
2004-10-13 11:54
2004.10.31
О TList и функциях





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский