[Delphi] Funkcja wyszukująca słowo (wholeword) bez VCL

0

Witam

Poszukuję funkcji, która wyszuka w String'u oddzielne słowo, nie frazę.
Funkcja AnsiPos wyszukuje frazę.

Pzdr

0

a nie wystarczy coś w stylu:

i := AnsiPos(' ' + slowo + ' ', ' ' + zdanie + ' ') - 1;

??

0

Wil, jak nie masz nic do powiedzenia to lepiej nie pisz.

Adamo, powinno wystarczyć :), napisałem taką funkcję, ale w bardziej skomplikowany sposób. Twój pomysł jest zdecydowanie lepszy.

Pzdr

0

To zadziała pod warunkiem, że nie masz takich bajerów jak koniec linii, tabulacja itp. Bo trzebaby wcześniej wszystkie whitespace'y zamienić na spacje.

0

Jeżeli funkcji AnsiPos jako parametr do przeszukania podam string zawiarający znaki końca linii czy zostanie on przeszukany w całości czy tylko 1-sza linia ?

Co do zamiany:

const TOld: array[0..2] of String = (#13, #10, #9);

  for i := Low(TOld) to High(TOld) do
    S := StringReplace(S, TOld[i], ' ', [rfReplaceAll]);

Czy pominąłem jakiś znak ??

0

a nie prościej tak

i := AnsiPos(slowo, zdanie);
a potem sprawdzić co jest z lewej i prawej strony słowa? Jeśli to edytor to nie chciał bym, aby przy wyszukiwaniu zamieniło mi tab na spację, to raz a dwa co z przypadkiem np. takim:

ala,która, ma kota

tu która to też osobne słowo i też powinno zostać znalezione

0
Misiekd napisał(a)

a nie prościej tak

i := AnsiPos(slowo, zdanie);
a potem sprawdzić co jest z lewej i prawej strony słowa? Jeśli to edytor to nie chciał bym, aby przy wyszukiwaniu zamieniło mi tab na spację, to raz a dwa co z przypadkiem np. takim:

ala,która, ma kota

tu która to też osobne słowo i też powinno zostać znalezione

Misiekd:

  • no to kod będzie chyba trochę dłuższy, tymbardziej że jeśli słowo jednak nie ma spacji przed to będzie trzeba wznowić wyszukiwanie po tej pozycji i zrobić nową funkcję znowu na szukanie od podanej pozycji ...
  • nawet jeśli to edytor to mi by nie przeszkadzało że sobie w pamięci zmieniło tab na spację :-| w ogóle to mnie nic nie obchodzi co sobie w pamięci program robi, byleby to wyświetlane zostało takie same
  • no to wystarczy to posta wcześniej dodać jeszcze przecinek, kropkę, średnik i parę pierdół, ogólnie to możnaby wszystkie znaki [#0 .. #47] zamienić na spację

Wil:
co za różnica dla jakiego słowa, przecież funkcję piszesz raz a słowo podajesz w parametrze, chyba nie chcesz powiedzieć że napisałeś procedurę w stylu

if (s[i - 1] = ' ') and (s[i] = 'k') and (s[i + 1] = 'o') and (s[i + 2] = 't') then

:-|

Misiekd napisał(a)

Twój program i zrobisz jak uważasz. Ale zauważ, że wysukiwanie od danej pozycji oraz wyszukiwanie nie słów a ciągu znaków (np. kot w domkotmama) jeśli to ma byc jakiś konkretny edytor a nie zabawaka też powinien mieć. Poza tym już wiem, że Ciebie nie obchodzi ile zajmuje program w pamięci i ile wyszukuje coś w tekście ale przeciętnego usera tak. Jak będziesz miał 1MB textu i będziesz w nim po kolei zamieniał 15-20 znaków na inne (czyli robił tą zamianę 15-20 razy) to powiedz mi, gdzie tu logika i sens. A co do szukania od danego miejsca to zobacz sobie jak wyglądają źródła procedury pos i zmień ją aby szukała od konkretnego miejsca i już.

no nie mój program i nawet go na oczy nie widziałem, nigdy nie patrzysz na autora posta ? miało być po prostu "prościej" a twoje rozwiązanie na pewno nie było prostsze. Ja bym wprawdzie nigdy nie zrobił czegoś podobnego, a ogólnie staram się tylko jeśli ktoś mi płaci, albo ogólnie jeśli chcę się podpisać swoim nazwiskiem pod danym programem. Poza tym nawet jeśli to nie mogę zajrzeć w źródła procedury pos bo jest w unicie system.pas którego mam tylko skompilowanego co oznacza że jakbym go pobrał i zajrzał to by to było niezgodne z licencją wręcz nielegalne, za to można zrobić w 2 sek odpowiednią prockę, a w faqu nawet jest ona napisana ...

0
Adamo napisał(a)

Misiekd:

  • no to kod będzie chyba trochę dłuższy, tymbardziej że jeśli słowo jednak nie ma spacji przed to będzie trzeba wznowić wyszukiwanie po tej pozycji i zrobić nową funkcję znowu na szukanie od podanej pozycji ...
  • nawet jeśli to edytor to mi by nie przeszkadzało że sobie w pamięci zmieniło tab na spację :-| w ogóle to mnie nic nie obchodzi co sobie w pamięci program robi, byleby to wyświetlane zostało takie same
  • no to wystarczy to posta wcześniej dodać jeszcze przecinek, kropkę, średnik i parę pierdół, ogólnie to możnaby wszystkie znaki [#0 .. #47] zamienić na spację

Twój program i zrobisz jak uważasz. Ale zauważ, że wysukiwanie od danej pozycji oraz wyszukiwanie nie słów a ciągu znaków (np. kot w domkotmama) jeśli to ma byc jakiś konkretny edytor a nie zabawaka też powinien mieć. Poza tym już wiem, że Ciebie nie obchodzi ile zajmuje program w pamięci i ile wyszukuje coś w tekście ale przeciętnego usera tak. Jak będziesz miał 1MB textu i będziesz w nim po kolei zamieniał 15-20 znaków na inne (czyli robił tą zamianę 15-20 razy) to powiedz mi, gdzie tu logika i sens. A co do szukania od danego miejsca to zobacz sobie jak wyglądają źródła procedury pos i zmień ją aby szukała od konkretnego miejsca i już.

1 użytkowników online, w tym zalogowanych: 0, gości: 1