Страница 1 из 2
Чтение строк из файла до определённого символа
Добавлено: 13 мар 2007, 11:05
Сейчас_не_спящий
Всем доброго времени суток.
Есть проблема:
есть файл 1.txt в нём записаны слова через символ "=" например:
abc=cba
awf=sr
adyrh=pk
.....и т.д.
что надо:
на форме лежат эдит, кнопка и лабел. Как сделать так чтобы, при вводе слова например "abc" делался поиск по файлу и выводилось значение которое стоит за символом "=". Выводилось например в "label1". Вводишь "abc" выдаёт "cba"?
По сути я нашёл очень схожую тему на одном форуме, но представленное там решение задачи у меня не работает, юзаю Дельфю7, может проблема не в коде? Хотя там ясно написано что на дэльфи делалось.
Вот линк на ту тему из форума:
http://forum.sysadmins.ru/24/144094/?st ... highlight=
Re: Чтение строк из файла до определённого символа
Добавлено: 13 мар 2007, 15:05
BBB
Вообще (глядя на структуру файла) все очень похоже на чтение из INI-шки.
В WinAPI для чтения из INI есть функция GetPrivateProfileString:
Код: Выделить всё
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // section name
LPCTSTR lpKeyName, // key name
LPCTSTR lpDefault, // default string
LPTSTR lpReturnedString, // destination buffer
DWORD nSize, // size of destination buffer
LPCTSTR lpFileName // initialization file name
);
Единственное, что в файле должна быть объявлена какая-нибудь INI-секция (раздел). То есть в самом верху должна быть строка, например:
[SYSTEM]
Re: Чтение строк из файла до определённого символа
Добавлено: 13 мар 2007, 15:40
Сейчас_не_спящий
вообще это обыкновенный текстовый файл, хотя ничего не стоит его переименовать, Дэлфи будет его читать точно также как и тхт. а с чтинем из ини я не знаком, пример по этой теме выложить можешь?
Re: Чтение строк из файла до определённого символа
Добавлено: 13 мар 2007, 17:52
BBB
Сейчас_не_спящий,
Переименовывать файл совершенно нет нужды. В функции указывается полное имя файла (включая расширениее)
Оказывается, в Delphi есть класс TIniFile (uses IniFiles)
Использовать, видимо, как-то так (пишу по help-у, в Дельфях не приходилось этого делать).
Код: Выделить всё
Var vIni : TIniFile;
st_adyrh :string;
begin
vIni.Create ('C:\MyFlder\MyFile.TXT');
st_adyrh := ReadString (
'SYSTEM', // раздел файла
'adyrh', // ключ, т.е. то, что слева от твоего '='
'adyrh'); // значение по умолчанию, т.е. то, что вернет функция,
// если ключ 'adyrh' в разделе 'SYSTEM' или вообще раздел
// 'SYSTEM' отсутсвуют
vIni.Free ();
end;
Или, если не использовать этот класс, то:
Код: Выделить всё
var Buffer: array[0..2047] of Char;
stResult : String;
Section, Ident, Default : string
FileName : string;
begin
FileName := 'C:\MyFlder\MyFile.TXT';
Section := 'SYSTEM';
Ident := 'adyrh';
Default := 'adyrh';
SetString (stResult,
Buffer,
GetPrivateProfileString (PChar(Section),
PChar(Ident), PChar(Default), Buffer, SizeOf(Buffer),
PChar(FileName)));
end;
Re: Чтение строк из файла до определённого символа
Добавлено: 13 мар 2007, 21:56
Сейчас_не_спящий
По хэлпу полазил, более-менее вроде разобрался, но всё же хочу разобраться через старый, добрый "Pos", да и так более привычно. Что разберусь это точно, вопрос только когда=)) В общем подскажите плиз как это делать через пос, у меня голова не догоняеет lefststr не катит

.
Re: Чтение строк из файла до определённого символа
Добавлено: 14 мар 2007, 08:44
Игорь Акопян
читаем из файла строку, ищем позицию символа "=", если она больше 0 (т.е. есть) сравниваем фрагмент прочитанной строки от начала до собсно символа "="
если наш ключ - читаем от Pos до конца строки - это значение
Re: Чтение строк из файла до определённого символа
Добавлено: 14 мар 2007, 09:20
BBB
Игорь Акопян писал(а):читаем из файла строку, ищем позицию символа "=", если она больше 0 (т.е. есть) сравниваем фрагмент прочитанной строки от начала до собсно символа "="
если наш ключ - читаем от Pos до конца строки - это значение
Возможно, также стОит после нахождения '=' до сравнения отсечь лидирующие и хвостовые пробелы. Возможно, и у найденного значения (того, что после '=') тоже отсечь.
Но все это уже в зависимости от того, нужно или не нужно это по данному алгоритму.
Re: Чтение строк из файла до определённого символа
Добавлено: 14 мар 2007, 10:27
LAngel

опять мой любимый TStringList
у него есть параметр Value, через который можно получить как раз что "стоит" после "=" в строке:
[syntax=delphi]var
Str: TStringList;
S: String;
begin
Str := TStringList.Create;
try
Str.LoadFromFile('FileName.ext');
S := InputBox('?', '', '');
ShowMessage(Str.Values[S]);
finally
Str.Free;
end;
end;[/syntax]
Re: Чтение строк из файла до определённого символа
Добавлено: 14 мар 2007, 23:06
Сейчас_не_спящий
У меня получилось добиться результата вот таким способом:
Код: Выделить всё
var
f : TextFile;
s, s1, s2 : string;
begin
s1 := '...'; // тут например abc
AssignFile(f, '1.txt');
Reset(f);
while not Eof(f) do
begin
readln(f, s);
if Pos('...', s) > 0 then // вместо "..." символы после которых идёт поиск, вроде так
begin
s2 := Copy(trim(s),Length(s1),255);
ComboBox1.Items.Add(trim(s2));
end;
end;
closefile(f);
end;
Хотя может и не работать, писал по памяти, не с дома
Re: Чтение строк из файла до определённого символа
Добавлено: 30 дек 2012, 05:42
Volkogriz
Код: Выделить всё
function get_param(bg,ed:string;rep:string):string;//получение параметров
var i:integer;
begin
i:=pos(bg,rep);
if i<>0 then begin
i:=i+length(bg)-1;
delete(rep,1,i);
get_param:=copy(rep,1,pos(ed,rep)-1);
end
else get_param:='';
end;
Используем:
function TForm1.load_LibImControl:бла бла бла; //так же делайте процедуру ниже указанный код можно вставить куда угодно!
var
ff:textfile;
s1,s2:string;
begin
assignfile(ff,extractfilepath(Application.ExeName)+'Installation.sis');
{$I-}
reset(ff);
{$I+}
if ioresult<>0 then
begin
exit;
end;
repeat
readln(ff,s1);
s2:=copy(s1,1,pos('=',s1)-1);
if s2='LibImControl' then
например-edit.txt:= get_param('"','"',s1);
например-integer:= StrToInt(get_param('"','"',s1));
//вобщем разберётесь мне очень помогает эта функция!
until eof(ff);
closefile(ff);
end;
С уважением,
Volkogriz!