Поиск текста в тексте файла
Кароче дан текст ,допустим:
"фл23ыпвфыпротим
фыв0ф9ы457выфв
ыва44455ыТИМОНфы7вфыв
фыв4фыв57фыв"
Нужно присвоить переменной S значение "ТИМОН".
З.Ы. текст находится в определённом файле.
---------
Помогите кто чем может(лучше ф-цией).
пример ф-ции:
Обращаю внимание именно ТЕКСТА,а не символа,или строки!
Кароче дан текст ,допустим:
"фл23ыпвфыпротим
фыв0ф9ы457выфв
ыва44455ыТИМОНфы7вфыв
фыв4фыв57фыв"
Нужно присвоить переменной S значение "ТИМОН".
З.Ы. текст находится в определённом файле.
---------
Помогите кто чем может(лучше ф-цией).
пример ф-ции:
Открываешь файл для чтения и дерзаешь с помощью pos
А если по подробней....
var f:textfile;
s:string;
c:char;
begin
....
while not(EoF(f)) do
begin
s:='';
while not(EoLN(f)) do
begin
read(f,c);
s:=s+c;
if s='ТИМОН' then Writeln('СЛОВО НАЙДЕНО');
//запоминаешь как-нибудь номер строки и позицию курсора
if length(s)=5 then s:=s[2]+s[3]+s[4]+s[5];
end;
end;
Естественно это все может и должно быть более автоматизировано!
var f:textfile;
FF:TSearchRec;
s,s2:string;
i,fa:integer;
begin
fa:=faAnyFile;
If FindFirst('c:\*.*',fa,FF)<>0 Then Exit;
While FindNext(FF)=0 Do
If (faDirectory and FF.Attr)=0 Then
begin
AssignFile(f,'c:\'+f.name);
Reset(f);
s:='ТИМОН';
while not(EoF(f)) do
begin
writeln(f,s2);
for i:=1 To length(s2)-length(s) Do
if copy(s2,i,length(s))=s Then
begin
ListBox1.Items.Add(FF.Name);
CloseFile(f);
Break;
Break;
end;
end;
end;
Эта процедура просмотрит в корне C:\ все файлы (текстовые), и выведет название файлов в листбокс в которых присутствует хоть одно слово "ТИМОН"...
может с незначительными ошибками будет, без Делфи писал
Чё енто означает,вернее зачем если в переменной S и так уже хранится исходный текст.Или я так понимаю там храниться просто набор символов по твоей логике.
________________________________________________
То wanja:
Нужно вытащить определённый...... текст из текста!:roll:
...
Reset(file);
S:='TIMON';
While not EOF(file) do
begin
System.ReadLn(file,sFile);
if Pos(S, sFile)>0 then
...
<чего-то делаешь>
...
end;
Чё енто означает,вернее зачем если в переменной S и так уже хранится исходный текст.Или я так понимаю там храниться просто набор символов по твоей логике.
________________________________________________
То wanja:
Нужно вытащить определённый...... текст из текста!:roll:
(Рассмотрим слово ТИМОН) Верно, так и есть: там храняться четыре предыдущих символа. Так каждом следующем шаге цикла мы убираем из слова первую букву (напр.: было "ШТИМО", в цикле убираем букву "Ш" => получаем "ТИМО" и на следующем шаге добавляем следующую идущую по тексту букву, напр. "Н". => получаем слово "ТИМОН"
Если тебя смущает название переменной, то можно ее назвать IckomajStroka или S1.
Если тебе не нравится что поиск слов ведется для каждой отдельной строки в файле, то можно это убрать и текст(я называю это строкой) будет искаться с возможностью переноса на следующую строку.
Дело в том,что я тебя недопонимаю. Ты бы не мог по-подробнее сформулировать свою задачу, а лучше привести пример(поярче) и посложнее, чтобы люди вникли в суть происходящего!
Дело в том,что я тебя недопонимаю. Ты бы не мог по-подробнее сформулировать свою задачу, а лучше привести пример(поярче) и посложнее, чтобы люди вникли в суть происходящего!
Лано так и быть раскажу....
Я хочу создать прогу(друг попросил) которая работает с boot.ini .
текст бута:
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS1
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS1="Microsoft Windows XP Professional" /execute=optin /fastdetect /noguiboot /NOPAE
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="WindowsONBAG" /execute=optin /fastdetect /noguiboot /NOPAE
Нужно например достать Значения timeout и изменит его например с 30 на 5.
Лано так и быть раскажу....
Я хочу создать прогу(друг попросил) которая работает с boot.ini .
...
Нужно например достать Значения timeout и изменит его например с 30 на 5.
Меню Пуск -> Панель управления -> Система
На странице Дополнительно кнопка Загрузка и восствновление.
Следующий код толкай в FormActivate:
Memo1.Lines.LoadFromFile('c:\boot.ini');
For i:=0 To Memo1.Lines.Count-1 Do
Begin
s:=Memo1.Lines(i);
If Copy(s,1,7)='timeout' Then Edit1.Text:=Copy(s,9,Length(s)- //восемь);
End;
А этот чтобы сохранить (в какой-нибудь БатонКлик):
For i:=0 To Memo1.Lines.Count-1 Do
Begin
s:=Memo1.Lines(i);
If Copy(s,1,7)='timeout' Then Memo1.Lines(i):='timeout='+Edit1.Text;
End;
DeleteFile('c:\boot.ini');
Memo1.Lines.SaveToFile('c:\boot.ini');
Только почему-то файл не rewrite, а если сначала его delete а потом save, то все OK получается...
мля забыл,наверное лучше будет если еще Memo.WordWrap в False поставить
uses inifiles
...
var
fileattr:Cardinal;
inifile:TIniFile;
begin
// узнаем какие атибуты были у файла
fileattr:=GetFileAttributes(pchar('c:\boot.ini')
// снимаем системый атрибут, иначе не сможем сохранить
SetFileAttributes(pchar('c:\boot.ini'),FILE_ATTRIBUTE_NORMAL);
//открываем boot.ini
Inifile:=TIniFile.Create('c:\boot.ini');
//пишем в параметр значение
Inifile.WriteString('boot loader','timeout','5');
//закрываем
Inifile.Free;
// восстанавливаем системый атрибут
SetFileAttributes(pchar('c:\boot.ini'),fileattr);
end;