Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.24;
Скачать: CL | DM;

Вниз

Помогите осуществить сложную задачу...   Найти похожие ветки 

 
Fiximil   (2003-04-05 12:05) [0]

1) Имеется "stroka" (string):
stroka:="december,october,january,september,nivember";
2) Имеется INI-файл с примерно таким содержанием:

[INI]
years=2001,2002,2003,2004
months=january,december,novermber,march,july
days=monday,tuesday,sunday,wednesday
time=hour,minute,second

И вот нужно по "strok"e" найти в INI-файле строку с максимальным сходством (в данном случае это будет "months") и затем название этой "категории" занести в "name" (string)

Т.е. что-то типа перебора получается....
Помогите пожалуйста осуществить. Плиззз!!!!!! Буду очень благодарен.
спасибо!

P.S. Почему модератора постоянно удаляет этот пост из "основного" форума???


 
Song ©   (2003-04-05 12:13) [1]

Дык тут лучше не ini а обычный txt файл в TStringList загрузить, дальше For .. Do .. Pos() т.е. обычный парсинг.


 
Fiximil   (2003-04-05 12:15) [2]

В том то и дело, что нужно всё это проделаывать с INI :(
Эх, блин......


 
Song ©   (2003-04-05 12:22) [3]

Ну так открой ini файл в TStringList :)
ini - это ж обычный текстовый файл.


 
Satirus   (2003-04-05 15:35) [4]

ну раз нужен .ини, тогда и пользуй его
var IniFile:TiniFile
а дальше по справке: создал, загрузил, прочитал, сравнил, закрыл, освободил


 
Fiximil   (2003-04-05 21:13) [5]

Вся фишка в том, что сравнивение надо делать не по всей строке, а по словам, отделённых запятыми в "stroka". Т.е. если поле "months" в INI-файле будет такого знчения: "january,december,july", то "stroka" с таким значением: "december,july,january" должна быть похожа на значение "months", следовательно, "name" должно приянть значение "months"
Плиз, помогите с кодом!


 
Song ©   (2003-04-05 21:43) [6]

ну так Pos(), For .. RTFM..


 
Fiximil   (2003-04-06 11:16) [7]

Эх...ладно......ну не знаю я этого :(


 
Fiximil   (2003-04-06 17:17) [8]

Кто-нить может помочь с кодом?????????


 
Fiximil   (2003-04-06 19:53) [9]

:*(


 
kaif ©   (2003-04-06 21:33) [10]

Что значит "максимальное сходство"?
Судя по задаче, нужно просто перебрать все слова из stroka и найти хоть одно из них хоть где-нибудь.
Или я что-то не так понял?
Для этого нужно сначала научиться дробить строку, разделенную запятыми, в отдельной функции.
Затем использовать эту функцию для сканирования stroka и
строк в ini-файле. Если ini-файл небольшой, я бы использовал TIniFile для такой цели. Там много методов обратиться к отдельным строкам ini.


 
Fiximil   (2003-04-06 22:56) [11]

>kaif

Во-во..."максимальное сходство" я имел в виду схожество слов, разделённыз запятыми в "stroka" с какой-нибудь категорией в INI-File. И там, где эта "схожесть" больше, то название той группы и поставить в "name".

Блин, чувствую, хрен когда я это сделаю :(((


 
panov ©   (2003-04-07 00:26) [12]

Вот функция, которая тебе поможет:

function CategoryFromIni(const aSec,aValue: String): String;
var
ini: TIniFile;
tLNames,tlValues,tmpList: TStringList;
index,i,j: integer;
begin
Result := "";

tLNames := TStringList.Create;
tLValues := TStringList.Create;
tmpList := TStringList.Create;

tmpList.Text := AnsiUpperCase(StringReplace(aValue,",",#13#10,[rfReplaceAll]));

ini := TIniFile.Create("F:\data\test\StrList\file.ini");
try
ini.ReadSection(aSec,tLNames);

for index := 0 to tLNames.Count-1 do
begin
tlValues.Text := AnsiUpperCase(StringReplace(ini.ReadString(aSec,tLNames[index],""),",",#13#10,[rfReplaceAll]));
for i := 0 to tmpList.Count-1 do
begin
for j := 0 to tLValues.Count-1 do
begin
if tmpList[i]=tLValues[j] then tLNames.Objects[index] := Pointer(Integer(tLNames.Objects[index])+1);
end;
end;
end;

i := 0;

for index := 0 to tLNames.Count-1 do
begin
if Integer(tLNames.Objects[index])>i then i := index;
end;

Result := tLNames[i];

finally
tLNames.Free;
tLValues.Free;
tmpList.Free;
ini.Free;
end;
end;

Вызов:
NameStrFromIni := CategoryFromIni("INI","december,october,january,september,november");

Содержимое файла file.ini:

[INI]
years=2001,2002,2003,2004
months=january,december,november,march,july
days=monday,tuesday,sunday,wednesday
time=hour,minute,second

А удалялись твои ветки потому, что в теме нужно писать тему сообщения.



Страницы: 1 вся ветка

Текущий архив: 2003.04.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
3-76806
Андрей Королёв
2003-04-05 18:27
2003.04.24
Как заставить InputQuery принимать INTEGER значения


14-77140
Officeman
2003-04-02 20:55
2003.04.24
Как разбить строку на подстроки!


3-76838
Remis
2003-04-05 00:15
2003.04.24
сортировка по национальному альфабиту


4-77235
igorbuz
2003-02-23 04:42
2003.04.24
запуск программы из своей с контролем


3-76833
Oleon
2003-04-07 15:38
2003.04.24
Как сравнить две базы и одну догнать до другой в MS SQL.