Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
1-76875
Silver_
2003-04-14 16:09
2003.04.24
типа Screen.OnActiveControlChange


1-76883
default
2003-04-12 03:10
2003.04.24
---|Ветка была без названия|---


14-77134
Kapitan
2003-04-04 10:48
2003.04.24
compress in Arj


4-77227
Diamond Cat
2003-02-26 23:42
2003.04.24
Интересная ситуация


14-77082
I.G.
2003-04-06 07:34
2003.04.24
Запись CD-R/RW дисков.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский