Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Поиск текста и его копирование в переменные


Автор: andrey_post 21.1.2004, 09:44
Передо мной строит такая задача. Есть тектовой файл, его структура вот такая:

:15 число: 456774
:30 число: 20040121
:32 число: 480983409

Мне нужно искать в файле строки ":15", ":30", ":32" и из каждой строки после второго двоеточия вытягивать число в какую-нибудь переменную, а затем после этих действий в поле :15: записать после чисел слово "ОКЕЙ" и сохранить файл.

Пока я использую Memo:
Код

for i:=0 to memo1.lines.count-1 do
    begin
       if 0<pos(':32', memo1.lines[i]) then
       Edit1.text:=memo1.lines[i];
    end;


У меня вытягивается вся строка... confused.gif
Помогите плиз советом!!!

Автор: Illusion Dolphin 21.1.2004, 10:53
функция copy(s:string; begin_char_number, count_of_chars:integer);
пример: есть строка
var s,s1:string;
s:="1234567890";
s1:=copy(s,3,4); //s1="3456"

Автор: andrey_post 21.1.2004, 11:33
Про функцию copy я в курсе, до дело в том что я не знаю какое количество символов будет стоять после второго двоеточия в строке, там модет быть и 3 символа, и 30 символов.
Так то эту функцию можно и так написать:
Код

for i:=0 to memo1.lines.count-1 do
    begin
       if 0<pos(':15', memo1.lines[i]) then
         s:=memo1.lines[i];
         s1:=copy(s,10,6);
         Edit1.Text:=s1;
    end;
  for i:=0 to memo1.lines.count-1 do
    begin
       if 0<pos(':30', memo1.lines[i]) then
         s:=memo1.lines[i];
         s1:=copy(s,10,6);
         Edit2.Text:=s1;
    end;
  for i:=0 to memo1.lines.count-1 do
    begin
       if 0<pos(':32', memo1.lines[i]) then
         s:=memo1.lines[i];
         s1:=copy(s,11,12);
         Edit3.Text:=s1;
    end;


но смысла я не вижу... к примеру, программе необходимо в файле или в Memo1 найти строку по шаблону ":15", скопировать в переменную все что идет после второго двоеточия, т.е. :15 TEXT: XXXXXXX, т.е. все Х. А после этого добавить после ХХХХХХ в этой строчке слово OKEY.
Пример:
Имеем строчку: :15 TEXT: 345345600
копируем 345345600 в переменную с переводом StrToInt(), затем после цифр добавляем слово OKEY и сохраняем файл. Строкча должна получится такой:
:15 TEXT: 345345600 OKEY

Автор: Paradox 21.1.2004, 11:43
МОжно копировать с 10-го до length(s)-10

Автор: x77 21.1.2004, 11:51
удаляешь певый символ Delete (s, 1, 1);
получаешь первое число s1 := Copy (s, 1, Pos (' ', s) - 1);
удаляешь пробел Delete (s, 1, 1)
получаешь второе число s2 := Copy (s, 1, Pos (':', s) - 1);
удаляешь двоеточие Delete (s, 1, 1)
остаётся третье число s3 := s;


дальше делаешь с ними вмеми чего хочешь.

Автор: x77 21.1.2004, 11:58
Цитата
дело в том что я не знаю какое количество символов будет стоять после второго двоеточия в строке, там модет быть и 3 символа, и 30


ты же можешь его определить, твой число всегда находится между первым пробелом и вторым двоеточием. а чтобы первое двоеточие не мешалось, его надо просто убить. тогда весь код вообще две строчки:

Delete (s, 1, 1);
s2 := Copy (s, Pos (' ', s) + 1, Pos (':', s) - Pos (' ', s));

Автор: 78125 21.1.2004, 13:26
Цитата
Про функцию copy я в курсе, до дело в том что я не знаю какое количество символов будет стоять после второго двоеточия в строке, там модет быть и 3 символа, и 30 символов.


Дак число будет располагаться между ":" и последним символом, те length.

Автор: andrey_post 21.1.2004, 15:03
Ура!!! Все получилось! только надо до конца довести,
вообще без понятия как слово OKEY дописать.
Вижу два варианта:
Или определить конец строки в Memo1 и дописать туда программно, а потом программно сохранить
или переписывать строки, хотя переписывать не хотелось бы.
как программно добавить в конец активной строки в Memo1 слово?.

Автор: x77 21.1.2004, 15:22
что значит "активной"? для любой i-той строки так:

Lines [i] := Lines [i] + 'OKEY';

для строки, на которой сейчас стоит курсор:

SelText := 'OKEY';

Автор: andrey_post 21.1.2004, 16:10
Ок! Спасибо большое!!! Все получилось!!!

Автор: x77 21.1.2004, 16:30
smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)