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

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

Вытащить из текстового файла нужную строку [D7, WinXP]


dup ©   (2009-05-17 16:45:00) 

Привет мастера!
Парюсь уже весь день, не могу понять как вытащить из текстового файла строку которая например начинается со слова "delphi", а затем отсчитать после нее 20 символов и сохранить их в string?

гуглил на эту тему нашел только функцию выдергивания определенного выражения из файла.

Жду ответа


Anatoly Podgoretsky   (2009-05-19 08:57:00) [1]

А зачем TFileStream, чтобы потрахаться?


TStas   (2009-05-19 00:01:00) [2]

А в чём проблема-то её нежно выпарсить из файла? Ведь, даже если файл гиганский на весть диск, как строчку парсим, так, один в один, парсим и файл. Открываем файл через TFileStream, а дальше точно также. Только когда строчку пасрим, то переводим у парсера "указатель", а там - у потока через Seek.


KilkennyCat   (2009-05-18 01:55:00) [3]


> Сергей М. ©   (17.05.09 17:44) [2]
> Большой файл-то ?

Это что, новый критерий поиска?


Сергей М.   (2009-05-17 21:31:00) [4]


> вообще это исходный код странички


Для работы с HTML-документами есть куча готовых инструментов, и изобретать велосипед нет никакого резона


<input type='submit' value="Найти!">
<input type=hidden name='key' value='961a8dede6cd9d51cc2612add346d4c2'>
<input type=hidden name='wmr' value='get'>
<input type='text' name='bse' value='0'>
<input type=text size="25" name="q" value=''>


Во всех этих фрагментах строка начинается не с value=, а с <input type=


dup   (2009-05-17 19:55:00) [5]

сделал вот так:
v:=copy(s,pos('name='+#39+'wmkey'+#39+' value=',s)+20,32);

как то извращенно... но я рад все работает. спасибо тебе CrytoGen!!!


CrytoGen   (2009-05-17 19:39:00) [6]

pos('name=''key'' value=',s)


dup   (2009-05-17 19:37:00) [7]

v:=copy(s,pos('name='key' value=',s)+6,20);

проблемы с апострофами. как можно выйти из положения и искать эту строку?
name='key' value=


dup   (2009-05-17 19:13:00) [8]

он выходит на первый value, как выйти на второй?


dup   (2009-05-17 19:11:00) [9]

странно.... строка v содержит после выполнения вот это:
''> <input type='sub
а почему?


CrytoGen   (2009-05-17 18:54:00) [10]

var
 f   : textfile;
 s,v : string;
begin
assignfile(f,'text.txt');
reset(f);
while not eof(f) do
begin
  readln(f,s);
  if pos('value=',s)>0 then
  begin
    v:=copy(s,pos('value=',s)+6,20);
    break;
  end;
end;
closefile(f);
end;


Alien1769   (2009-05-17 18:47:00) [11]


> а как реализовать поиск этой строки с помощью ReadLn?

Перебором !


dup   (2009-05-17 18:29:00) [12]

а как реализовать поиск этой строки с помощью ReadLn?


CrytoGen   (2009-05-17 18:27:00) [13]

ReadLn не устраивает?


CrytoGen   (2009-05-17 18:27:00) [14]

ReadLn не устраивает?


dup   (2009-05-17 18:27:00) [15]

вообще это исходный код странички.

первый value:

<input type='submit' value="Найти!">

второй:

<input type=hidden name='key' value='961a8dede6cd9d51cc2612add346d4c2'>

третий:

<input type=hidden name='wmr' value='get'>

четвертый:

<input type='text' name='bse' value='0'>

и пятый:

<input type=text size="25" name="q" value=''>

нужно вытащить тот, который идет после key. я поискал в гугле. наткнулся на функции Pos и Copy. только не знаю как реализовать...

=====
Функция Pos(SubStr, Str: String) - возвращает позицию подстроки в строке. Нумерация символов начинается с единицы (1). В случае отсутствия подстроки в строке возращается 0. Пример:

Код:

var Str1, Str2: String; P: Integer;
{ ... }
Str1:='Hi! How do you do?';
Str2:='do';
P:=Pos(Str2, Str1);  { P = 9 }

====================================
Функция Copy(Str: String; Start, Length: Integer) - возвращает часть строки Str, начиная с символа Start длиной Length. Ограничений на Length нет - если оно превышает количество символов от Start до конца строки, то строка будет скопирована до конца. Пример:

Код:

var Str1, Str2: String;
{ ... }
Str1:='This is a test for Copy() function.';
Str2:=Copy(Str1, 11, 4); { Str2 = "test" }


Сергей М.   (2009-05-17 17:49:00) [16]


> строк начинающихся с  "value="  пять


И только одна из них имеет длину 32 символа ?


dup   (2009-05-17 17:47:00) [17]

файл 12 кбайт
строк начинающихся с  "value="  пять


Сергей М.   (2009-05-17 17:44:00) [18]

Большой файл-то ?

И сколько там строк, начинающихся с value= ?


dup   (2009-05-17 16:56:00) [19]

уточню вопрос: нужно найти строку, состоящую из 32 символов в файле и поместить ее в string. В самом файле она начинается с:
value=


Наверх

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