|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
найти слово в тексте
имеется текстовый файл с данными. небходимо написать процедурку которая будет записывать текст в ячейку стрингГрид-а, находящийся между двух определенных подстрок, например:
<условие> нужный текст <#условие> понимаю что надо читать файл до тех пор, пока не встретим необходимую комбинацию символов...как реализовать?.. Последний раз редактировалось Rocat, 04.07.2012 в 16:58. |
#2
|
||||
|
||||
Файл можно и не читать. Есть функция POS.
Код:
var a,b:char; a:=pos('первое что ищем', номер строки); b:=pos('второе что ищем', номер строки); Код:
copy(строка,a - начало,b-a+1 - количество символов) Работает только с одной строкой. Но в ячейку тоже всё одной строкой придётся записывать. А вот текст между несколькими строками уже не знаю как вычленить. Последний раз редактировалось R-18Rus, 04.07.2012 в 20:13. |
#3
|
|||
|
|||
Цитата:
но я ведь не знаю, в какой строке окажется это слово. может можно как то перевести текст в массив строк? |
#4
|
||||
|
||||
Цитата:
Код:
var a,b:integer; Код:
a:=pos('первое что ищем', Строка); b:=pos('второе что ищем', Строка(или "строка[номер]"-смотря откуда она); Код:
StringGrid1.Cells[aCol, aRow]:=copy(строка,a,b-a+1); |
#5
|
||||
|
||||
Можно "читать" файл в цикле для поиска нужной строки, можно сразу загрузить всё в StringList и использовать его возможности по поиску.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
||||
|
||||
Можешь загружать файл в стринглист, тогда его свойство Text будет содержать все строки файла:
Код:
var StrLst:TStringList; a,b:integer; begin strlst:=TStringList.Create; StrLst.LoadFromFile('путь к файлу'); a:=pos(substr1, StrLst.Text); b:=pos(substr2, StrLst.Text); StringGrid1.Cells[aCol, aRow]:=copy(StrLst.Text,a+length(substr1),b-(a+length(substr1))+1); StrLst.Free. end; Последний раз редактировалось YVitaliy, 04.07.2012 в 21:51. |
#7
|
||||
|
||||
Цитата:
А с переменными спутал маленько, извините. |
#8
|
||||
|
||||
для начала: какой макс. размер файла? байты, Кб, Мб, Гб, Тб?
Пишу программы за еду. __________________ |
#9
|
||||
|
||||
Дядя, учи регэкспы.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#10
|
|||
|
|||
Цитата:
Код:
var Fz: textFile; us, kus, st: string; k, k1, l, j: integer; Flag: boolean; curline:word; begin AssignFile(Fz, 'B_z.txt'); Reset(Fz); curline:=0; while not Eof(Fz) do begin flag:=false; while (not flag)and(not Eof(Fz)) do begin readln(Fz, st); k:=pos('<zadacha>',st); flag := (k<>0); end; inc(curline); Sg_data.RowCount:=Sg_data.RowCount+1; while (flag)and(not Eof(Fz)) do begin readln(Fz, st); k:=pos('<zadacha>',st); flag := (k<>0); Us:='<*uslovie>'; kUs:='<#'uslovie>; k:=Pos(Us, st); if k<>0 then begin readln(Fz, st); k1:=Pos(kUs,st); while k1=0 do begin Sg_data.Cells[1, curline] :=Sg_data.Cells[1, curline]+' '+st; readln(Fz, st); k1:=Pos(kUs,st); end; end; Us:='<uslovie>'; kUs:='<#uslovie>'; k:=Pos(Us, st); if k<>0 then begin readln(Fz, st); k1:=Pos(kUs,st); while k1=0 do begin Sg_data.Cells[1, curline] :=Sg_data.Cells[1, curline]+' '+st; readln(Fz, st); k1:=Pos(kUs,st); end; end; end; end; closefile(fz); end; |