Marmot Opublikowano 17 Listopada 2006 Udostępnij Opublikowano 17 Listopada 2006 Witam :) . Rzadko się o coś pytam na forum, ale twierdzę, że pewnie ktoś zna tu odpowiedź. Otóż, piszę sobie w Pascalu program, który ma za zadanie zamienianie pewnych znaków na inne. Mam coś takiego: var i:integer; tekst:string; begin tekst:=Edit1.Text; if pos('a',tekst) or pos('A',tekst) > 0 then begin i:=pos('a',tekst); if i=0 then i:=pos('A',tekst); delete(tekst,i,i); insert('1',tekst,i); end; Edit2.Text:=tekst; end; Działa to tylko wtedy, kiedy w tekście mam tylko jedno "a". Np. agugu zamieni mi na 1gugu, ale gdy już mam więcej "a", to program szwankuje i np. jak wpiszę ada to mi zamienia na 1da. Próbowałem też dać pętlę, która wygląda tak: var i:integer; tekst:string; begin tekst:=Edit1.Text; repeat if pos('a',tekst) or pos('A',tekst) > 0 then begin i:=pos('a',tekst); if i=0 then i:=pos('A',tekst); delete(tekst,i,i); insert('1',tekst,i); end; until pos('a',tekst) and pos('A',tekst) = 0; Edit2.Text:=tekst; end; Mimo tego, program zamienia tylko to pierwsze "a". Czy ktoś wie w czym tkwi problem, lub w czym ja robię błąd :P ? Przydałoby mi się to dosyć, więc chciałbym prosić o jak najszybszą odpowiedź ;) . PS. Jakby to miało coś pomóc, to korzystam z Lazarus 0.9.18 z kompilatorem Free Pascal 2.0.4 dla Linux i386. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pieter Opublikowano 17 Listopada 2006 Udostępnij Opublikowano 17 Listopada 2006 if (pos('a',tekst) > 0) or (pos('A',tekst) > 0) then tak powinno wyglądać... EDIT No co??? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 17 Listopada 2006 Udostępnij Opublikowano 17 Listopada 2006 Zobacz sobie warunek: until pos('a',tekst) and pos('A',tekst) = 0; i zadaj sobie pytanie przez ile on ma to wykonywać? :P EDIT Kurde, Pieter xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 17 Listopada 2006 Autor Udostępnij Opublikowano 17 Listopada 2006 Zrobiłem coś takiego: repeat if (pos('a',tekst) > 0) or (pos('A',tekst) > 0) then begin i:=pos('a',tekst); if i=0 then i:=pos('A',tekst); delete(tekst,i,i); insert('1',tekst,i); end; until (pos('a',tekst) = 0) and (pos('A',tekst) = 0); Dałem taki kod i już działa bez zarzutu :P . EDIT: Ale mam teraz nowy błąd. Mam taki kod: repeat if (pos('a',tekst) > 0) or (pos('A',tekst) > 0) then begin i:=pos('a',tekst); if i=0 then i:=pos('A',tekst); delete(tekst,i,i); insert('1',tekst,i); end; until (pos('a',tekst) = 0) and (pos('A',tekst) = 0); repeat if (pos('b',tekst) > 0) or (pos('B',tekst) > 0) then begin i:=pos('b',tekst); if i=0 then i:=pos('B',tekst); delete(tekst,i,i); insert('2',tekst,i); end; until (pos('b',tekst) = 0) and (pos('B',tekst) = 0); i gdy wpiszę np. baba, to mi zwraca 211, a gdy np. alibaba, to zwraca 1li2. Może mi ktoś wyjasnić, czym to jest spowodowane O_O ? Bo ja już naprawdę nie rozumiem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pieter Opublikowano 17 Listopada 2006 Udostępnij Opublikowano 17 Listopada 2006 zamiast pisać funkcje skorzystaj z Text := stringreplace(Text,z_czego,na_co,[rfReplaceAll, rfIgnoreCase]); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 17 Listopada 2006 Autor Udostępnij Opublikowano 17 Listopada 2006 Dobra, problem rozwiązany i przypadkowo stracone 12 linijek kodu :/ . Wpisałbym cię w Creditsach Pieterze, ale w moim programie nie ma Credits :P . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się