![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 и использовать его возможности по поиску.
|
|
#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
|
||||
|
||||
|
Дядя, учи регэкспы.
|
|
#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; |