Форум: "Начинающим";
Текущий архив: 2011.02.20;
Скачать: [xml.tar.bz2];
Внизпоиск и считывание текста Найти похожие ветки
← →
ПрохожийСпб (2010-11-26 11:34) [0]есть текстфайл, есть там искомая подстрока и число, надо найти эту полдстроку и выдрать число.
используюfunction FindWordInFile(const FileName, S: string; var Found: string): Integer;
var
List: TStringList;
Index: Integer;
begin
Result:= -1;
if not FileExists(FileName)
then Exit;
List:= TStringList.Create();
List.LoadFromFile(FileName);
try
for Index:= 0 to List.Count - 1 do
if Pos(S, List[Index]) <> 0
then begin
Result:= Index;
Found:= List[Index];
Break;
end;
finally
List.Free();
end;
end;S:="wcolor=">";
W:=FindWordInFile("settings.xhtm",S,Found);
if W<>-1 then begin
showmessage(IntToStr(W));
end;
Хоп нашел строку, и номер в ней,
после последнего знака (=) будет число(в строковом формате конечно)
одно,двух или трехразрядное, потом пробел.
Надо как то его достать в строковом формате, потом проблемы
перевести его в цифру нет (функция val)
файлы по 20 кб, строк нет (переводов каретки chr(13)),
как выдрать число????
← →
И. Павел © (2010-11-26 11:37) [1]> использую
> Хоп нашел строку, и номер в ней,
> проблемы
> перевести его в цифру нет
Хоп - и все сделали. а проблема то в чем?
PS: судя по описанию задачи, тут было бы удобно использовать регулярные выражения. На delphimaster есть компоненты для работы с ними. Есть и другие пакеты.
← →
И. Павел © (2010-11-26 11:41) [2]Вот Regular Expression Library v.3.1 (4361kb):
http://www.delphimaster.ru/cgi-bin/news.pl?showpage=20
← →
MonoLife © (2010-11-26 11:43) [3]
> как выдрать число????
inttostr(), floattostr()?
← →
И. Павел © (2010-11-26 11:44) [4]Пардон. Дал битую ссылку. Вот другая:
http://www.torry.net/vcl/vcltools/text/regexpr.zip
← →
ПрохожийСпб (2010-11-26 11:47) [5]нет, я нашел помоему позицию в файле, где начинается это подстрока
файл открывается и закрывается в функции и далее не доступенif W<>-1 then begin
showmessage(IntToStr(W));
s:=copy(File,W+8,20);
showmessage(s);
end;
надо что то вроде этого,
где File - тестовая строка размером в файл, интересно влезет?
W+8 - позиция подстроки + смещение, первая позиция цифры.
20-копирую побольше, далее можно проанализировать всю эту строку
и найти пробел.
wcolor=239 hcolor=255
достать надо 239
← →
RWolf © (2010-11-26 11:51) [6]регэкспами задачка решается в одно касание:
/wcolor=(\d+)/
← →
ПрохожийСпб (2010-11-26 23:01) [7]И. Павел ©
спасибо, какой-то навороченный компонент,
с ходу не разберешся, но регкепы не понимает
← →
Amoeba_ (2010-11-26 23:35) [8]Использование VBScript RegExp в Delphi
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1062
Текст с высоты птичьего полета или Регулярные выражения
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=163
← →
Inovet © (2010-11-27 00:10) [9]Вот нафига весь файл грузить в память, я понимаю что она стала дешёвая, но нафига.
← →
Германн © (2010-11-27 01:19) [10]
> Вот нафига весь файл грузить в память, я понимаю что она
> стала дешёвая, но нафига.
Имхо, это новая крайность. Батонокидатели первым образом ищут у компонента процедуру LoadFromFile().
Тем более, что старые учебники с AssignFile, Reset/Rewrite, Read/ReadLn/BlockRead благополучно забыты (Более того. На форумах уже эти методы работы с файлами уже считаются признаком ламерства). Вот только примеры работы со стримами не очень часты.
← →
KSergey © (2010-11-27 07:27) [11]А я как-то не понял приведенного кода.
Сначала вы пиш(и/е)те "строк нет (переводов каретки chr(13))", однако в TStringList бегаете по строкам, т.е. как будто предполагаете, что их загрузится больше одной.
Далее. Находите строку, в которой есть искомый шаблон - и всю ее возвращаете. Зачем?
Ну ладно, положим это мы решили задачу "как найти строку в файле, где есть искомый шаблон". Причем шаблон тоже нашли (его позицию в строке).
Ну а далее и вовсе просто:
p, i: integer;
s_num: String;
.......
// if Pos(S, List[Index]) <> 0
p := Pos(S, List[Index]);
if p > 0
then begin
Result:= Index;
Found:= List[Index];
s_num := "";
for i := p + Length(S) to Length(Found) do
if Found[i] in ["0".."9"] then
s_num := s_num + Found[i]
else
Break;
Break;
end;
После этого в s_num имеем либо пустую строку, либо строку-число.
Понятно, что-то можно сократить и все такое, я просто сильно переделывать не стал.
← →
mem (2010-11-27 12:18) [12]
> Sergey © (27.11.10 07:27) [11]
шикарно. Это чтобы убедится, что точно нашли ту строку, по которой искали?)
← →
KSergey © (2010-11-27 13:49) [13]> mem (27.11.10 12:18) [12]
> шикарно. Это чтобы убедится, что точно нашли ту строку, по которой искали?)
Не понял. Можно подробнее? Написано же
> После этого в s_num имеем либо пустую строку, либо строку-число.
Что не так?
← →
mem (2010-11-27 13:55) [14]
> Не понял. Можно подробнее? Написано же
прошу прощения, невнимательно прочитал что надо автору и
> for i := p + Length(S)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.02.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c