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

Вниз

Проблемы с функцией Pos()   Найти похожие ветки 

 
yustaz   (2004-05-21 17:13) [0]

Дело вот в чем:
есть список строк (DataString: TStrings) и список слов (Word: TStrings)
Программа берет по очереди строки из DataString и проверяет встречается ли в них слово из списка Word.
Делаю так:

{...
код
...}

For i:=0 to DataString.Count-1 do
begin
 For j:=0 to Word.Count-1 do
 begin
   if Pos(Word.Strings[j],DataString.Strings[i]) then //...
 end;
end;

проблема в том, что Pos() всегда возващает 0
но, если заменить Word.Strings[j] на слово, т.е. написать:

 if Pos("blabla",DataString.Strings[i]) then //...

то Pos() слово находит и возвращает отличное от нуля значение

где грабли?

я уже пробовал писать и PChar(Word.Strings[j]), не помогает.

помогите, кто сталкивался, направьте на путь истинный.


 
BFG9k   (2004-05-21 17:21) [1]

Кажется , проблема в Word (кстати , не задумывался , что так называется целочисленный тип - подбери другое название) , посмотри , что у тебя хранится в нем , а уже потом пеняй на Pos.  Короче будет DataString[i] , а не DataString.Strings[i].


 
Внук ©   (2004-05-21 17:21) [2]

Возможно, проблема в том, что Pos is case sensitive. Приведи значения Word.Strings[j] и DataString.Strings[i] на той итерации, где Pos по твоему мнению должен вернуть не ноль.


 
BFG9k   (2004-05-21 17:25) [3]

if Pos(Word.Strings[j],DataString.Strings[i]) then ...  - что за фигня ?


 
Reindeer Moss Eater ©   (2004-05-21 17:33) [4]

For i:=0 to DataString.Count-1 do
begin
For j:=0 to Word.Count-1 do
begin
 ShowMessage("Я весь такой из себя не верю, что эти строки не равны"#13#10
    +Word.Strings[j],DataString+#13#10+
     DataString.Strings[i]
);
 if Pos(Word.Strings[j],DataString.Strings[i]) then //...
end;
end;


 
Anatoly Podgoretsky ©   (2004-05-21 17:47) [5]

Все таки будьте поосторожнее с POS эта функция не возвращает логических значений


 
yustaz   (2004-05-21 17:57) [6]

to BFG9k: нет, проблема не в названии, Word - это для примера взято, все названия переменных номальные,
имелось ввиду естественно

имелось ввиду:
if Pos(Word.Strings[j],DataString.Strings[i])>0 then ...  

to Внук:
знаю, что Pos() чувствителен к регистру, проблема не в этом, все точно написано в одном регистре

to Reindeer Moss Eater:
ты это к чему?

---
пробовал другие методы поиска, ничего не помогает
если написать слово руками - находит, но если передать через
переменную то облом

я вот грешу на классы TStrings может они что-то подмешивают?


 
yustaz   (2004-05-21 17:58) [7]

to Anatoly Podgoretsky:
знаю, опечатку исправил в предыдущем посте, может есть идеи по решению?


 
Anatoly Podgoretsky ©   (2004-05-21 17:59) [8]

Reindeer Moss Eater ©   (21.05.04 17:33) [4]
Я бы к этому еще добавил индикатор
+"!"+#13#10+


 
Внук ©   (2004-05-21 18:06) [9]

yustaz   (21.05.04 17:58)
 Если проблема с регистром известна, то банальнейшая отладка тут же решит проблему.


 
yustaz   (2004-05-21 18:08) [10]

to Anatoly Podgoretsky :
эти строки не равны


 
yustaz   (2004-05-21 18:10) [11]

to Внук:
банальная отладка как раз и не помагает
только если лезть в саму Pos()


 
Внук ©   (2004-05-21 18:19) [12]

>>yustaz   (21.05.04 18:10) [11]
 Не помогает? Даже если эти строки сначала присвоить отдельным строковым переменным, а потом просмотреть побайтно?


 
yustaz   (2004-05-21 18:29) [13]

to Внук:
предлагаешь самому написать функцию поиска?


 
panov ©   (2004-05-21 18:31) [14]

Интересно, а как же создаются и заполняются списки?
Кода-то маловато приведено.


 
yustaz   (2004-05-21 18:37) [15]

to panov:

var
 Word: TStrings;
 DataString: TStrings;
begin
 Word := TStringList.Create;
 DataString := TStringList.Create;

 Word.Add("bla0");
 Word.Add("bla1");
 Word.Add("bla2");
 Word.Add("bla3");
 //...
 Word.Add("blaN");

 DataString.Add("str0");
 DataString.Add("str1");
 DataString.Add("str2");
 DataString.Add("str3");
 //...
 DataString.Add("strN");

//...

 Word.Free;
 DataString.Free;
end;


 
panov ©   (2004-05-21 18:42) [16]

>yustaz   (21.05.04 18:37) [15]
Проверил, прекрасно всё работает:

procedure TForm1.Button1Click(Sender: TObject);
var
Word: TStrings;
DataString: TStrings;
i,j: Integer;
begin
Word := TStringList.Create;
DataString := TStringList.Create;

Word.Add("bla0");
Word.Add("bla1");
Word.Add("bla2");
Word.Add("bla3");
//...
Word.Add("blaN");

DataString.Add("str0");
DataString.Add("str1");
DataString.Add("bla3");
DataString.Add("str3");
//...
DataString.Add("strN");

//...
For i:=0 to DataString.Count-1 do
For j:=0 to Word.Count-1 do
begin
  if Pos(Word.Strings[j],DataString.Strings[i])>0 then ShowMessage("Found!");
end;

Word.Free;
DataString.Free;
end;


 
WebErr ©   (2004-05-21 18:48) [17]


> panov ©   (21.05.04 18:42) [16]

Просто не могло не работать! :))))


 
yustaz   (2004-05-21 19:10) [18]

блин, разобрался кажется
всем спасибо за помощь

просто намудрил всписках



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

Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.031 c
14-1085141206
Monster
2004-05-21 16:06
2004.06.06
Engine


14-1085266276
Profi
2004-05-23 02:51
2004.06.06
Глюк?


9-1076423031
Aika
2004-02-10 17:23
2004.06.06
Искусственный интеллект - Тетрис !


1-1085055046
BFG9k
2004-05-20 16:10
2004.06.06
ValueListEditor2


14-1084925158
Serzh ml
2004-05-19 04:05
2004.06.06
(win XP) vs (win NT+9x)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский