Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск текста в тексте файла

3.6K
20 марта 2006 года
CrazyTimon
125 / / 13.02.2006
Обращаю внимание именно ТЕКСТА,а не символа,или строки!
Кароче дан текст ,допустим:
"фл23ыпвфыпротим
фыв0ф9ы457выфв
ыва44455ыТИМОНфы7вфыв
фыв4фыв57фыв"
Нужно присвоить переменной S значение "ТИМОН".
З.Ы. текст находится в определённом файле.
---------
Помогите кто чем может(лучше ф-цией).
пример ф-ции:
 
Код:
Function Search(SearchText:string);
344
20 марта 2006 года
Delpher
493 / / 14.08.2005
Цитата:
Originally posted by CrazyTimon
Обращаю внимание именно ТЕКСТА,а не символа,или строки!
Кароче дан текст ,допустим:
"фл23ыпвфыпротим
фыв0ф9ы457выфв
ыва44455ыТИМОНфы7вфыв
фыв4фыв57фыв"
Нужно присвоить переменной S значение "ТИМОН".
З.Ы. текст находится в определённом файле.
---------
Помогите кто чем может(лучше ф-цией).
пример ф-ции:
 
Код:
Function Search(SearchText:string);



Открываешь файл для чтения и дерзаешь с помощью pos

3.6K
21 марта 2006 года
CrazyTimon
125 / / 13.02.2006
Цитата:
Открываешь файл для чтения и дерзаешь с помощью pos

А если по подробней....

247
21 марта 2006 года
wanja
1.2K / / 03.02.2003
Кстати, что ты имеешь в виду под присвоением переменной S значения "Тимон"? Что, нужно вытащить слово, похожее на осмысленное?
6.9K
21 марта 2006 года
Britney
69 / / 20.03.2006
Ежели сам хочешь пописать чо-нить, то вот как бы я сделал( для слова ТИМОН допустим)

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;

Естественно это все может и должно быть более автоматизировано!
1.8K
21 марта 2006 года
LastSoul
279 / / 28.12.2005
Цитата:
З.Ы. текст находится в определённом файле.


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:\ все файлы (текстовые), и выведет название файлов в листбокс в которых присутствует хоть одно слово "ТИМОН"...
может с незначительными ошибками будет, без Делфи писал

3.6K
22 марта 2006 года
CrazyTimon
125 / / 13.02.2006
Цитата:
s:=s[2]+s[3]+s[4]+s[5];


Чё енто означает,вернее зачем если в переменной S и так уже хранится исходный текст.Или я так понимаю там храниться просто набор символов по твоей логике.
________________________________________________
То wanja:
Нужно вытащить определённый...... текст из текста!:roll:

11K
22 марта 2006 года
OlegIM
14 / / 06.09.2005
А чем тебе function Pos(Substr: string; S: string): Integer; не подходт?

...
Reset(file);
S:='TIMON';
While not EOF(file) do
begin
System.ReadLn(file,sFile);
if Pos(S, sFile)>0 then
...
<чего-то делаешь>
...
end;
6.9K
23 марта 2006 года
Britney
69 / / 20.03.2006
Цитата:
Originally posted by CrazyTimon
Чё енто означает,вернее зачем если в переменной S и так уже хранится исходный текст.Или я так понимаю там храниться просто набор символов по твоей логике.
________________________________________________
То wanja:
Нужно вытащить определённый...... текст из текста!:roll:



(Рассмотрим слово ТИМОН) Верно, так и есть: там храняться четыре предыдущих символа. Так каждом следующем шаге цикла мы убираем из слова первую букву (напр.: было "ШТИМО", в цикле убираем букву "Ш" => получаем "ТИМО" и на следующем шаге добавляем следующую идущую по тексту букву, напр. "Н". => получаем слово "ТИМОН"

Если тебя смущает название переменной, то можно ее назвать IckomajStroka или S1.

Если тебе не нравится что поиск слов ведется для каждой отдельной строки в файле, то можно это убрать и текст(я называю это строкой) будет искаться с возможностью переноса на следующую строку.

Дело в том,что я тебя недопонимаю. Ты бы не мог по-подробнее сформулировать свою задачу, а лучше привести пример(поярче) и посложнее, чтобы люди вникли в суть происходящего!

3.6K
23 марта 2006 года
CrazyTimon
125 / / 13.02.2006
Цитата:

Дело в том,что я тебя недопонимаю. Ты бы не мог по-подробнее сформулировать свою задачу, а лучше привести пример(поярче) и посложнее, чтобы люди вникли в суть происходящего!


Лано так и быть раскажу....
Я хочу создать прогу(друг попросил) которая работает с boot.ini .
текст бута:

 
Код:
[boot loader]
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.
7.9K
23 марта 2006 года
uki_
122 / / 26.01.2006
Цитата:
Originally posted by CrazyTimon
Лано так и быть раскажу....
Я хочу создать прогу(друг попросил) которая работает с boot.ini .
...
Нужно например достать Значения timeout и изменит его например с 30 на 5.


Меню Пуск -> Панель управления -> Система

На странице Дополнительно кнопка Загрузка и восствновление.

1.8K
23 марта 2006 года
LastSoul
279 / / 28.12.2005
В таком случае лучше наверное будет через Memo.
Следующий код толкай в 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 поставить
17K
30 марта 2006 года
PodJigaeFF
1 / / 30.03.2006
Попробуй вот так...

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;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог