Wyszukiwanie tekstu w zmiannej

0

Mam takie pytanko, czy jest to możliwe (zapewne jest :D) i jak to wykonać, z mianowicie chodzi mi o to, jak wyszukać dany ciąg znaków w stringu, odciać go i przenieść do innego stringa. Podam przykład: chodzi mi o klienta pocztowego: wysyłanie do wielu adresów tej samej wiadomości ma się odbywać przez odddzielenie ich znakiem ";" np.: [email protected];[email protected] - mam nadizeje, że zrozumiecie :D Już sobie wykombinowałem jak to będzie działać: najpierw w Edicie sprawdza, czy znajduje się znak ;, jeżeli tak kasuje ten znak, a tekst, który się znajduje po nim wrzuca do jakiegoś stringa. Najpierw wysyła wiadomość do tekstu w Edicie, potem po wysłaniu do jedego adresu czyści Edita i wrzuca zawartość stringa do niego. Takim sposobem możliwe by było wysyłanie jedej wiadomości do kilku adresów. Wiem, że coś tu chyba będzie z funkcją Pos, ale próbowałem i mi coś niewyszło :/ Jeżeli macie jakieś inne pomysły jak to rozwiązać, lub wiecie jak mi pomóc bardzo bym prosił :) Pozdrawiam i dziękuję...

0

pos(substr;str);
zwraca pozycje substr w str a jesli nie ma daje 0; potem juz tylko skopiowac

0

Pomotało mnie troche, a nawet bardzo :| Mogłby ktoś podać jakiś malutki przykład, tylko żebym ort!, bo coś mi to<ort> niewychodzi </ort>:/ Ale i tak dzięki za wskazówke...

0

no to ort! :)

if Pos(';',adresy)<>0 then begin
  adres2:=Copy(adresy,Pos(';',adresy)+1,length(adresy));
  Delete(adresy,Pos(';'adresy),length(adresy));
end;

PS Jak wysyłasz przez komponenty Indy to one uwzględniają że możesz podać kilka adresów oddzielonych średnikami

a tu masz gotową procedurę rozdzielającą adresy do tablicy adresy:

var adresy:array of string;
  i:integer;
  adres:string;
begin
  adres:='[email protected];[email protected];[email protected];[email protected]; [email protected]';
  i:=0;
  while Pos(';',adres)<>0 do begin
    Inc(i);
    setLength(adresy,i);
    adresy[i-1]:=Copy(adres,1,Pos(';',adres)-1);
    Delete(adres,1,Pos(';',adres));
  end;
  setLength(adresy,i+1);
  adresy[i]:=adres;

  for i:=0 to sizeOf(adresy) do ShowMessage('Adres nr '+IntToStr(i+1)+' to: '+adresy[i]); // wyświetlanie
end;
0

Eh, lama jestem i tyle [???] Adresy = Edit1.Text, Adresy2 = string; jak to tak robie to coś wychodzi całkiem innego :/ Z tym Delete też niewychodzi coś, eh - ogólnie lol. Zacznijmy tak:

 
if Pos(';',adresy)<>0 then begin
 adres2:=Copy(adresy,Pos(';',adresy)+1,length(adresy));
 Delete(adresy,Pos(';'adresy),length(adresy));
end;

Przerobiłem na:

 
if Pos(';',Edit1.Text)<>0 then begin
 adres2:=Copy(Edit1.Text,Pos(';',Edit1.Text)+1,length(Edit1.Text));
 Delete(adresy,Pos(';', Edit1.Text),length(Edit1.Text));
end;

I nadal coś się wali, już sam niewiem co robić :(

0

patrz post wyżej dałem kod

0

Wielkie dzięki, zaraz przenalizuje od początku cały kod, żeby się czegoś na przyszłość nauczyć, ale jeszcze jedno pytanko, dlateczego na końcu wykonywania procedury wywala się Error ? :/

0

jak jest jeden adres e-mail to długość jest źle zwracana i jest access violation
to zrób tak:

var adresy:array of string;
 i:integer;
 dlugosc:integer;
 adres:string;
begin
 adres:='[email protected];[email protected];[email protected];[email protected];[email protected]';
 i:=0;
 while Pos(';',adres)<>0 do begin
  Inc(i);
  setLength(adresy,i);
  adresy[i-1]:=Copy(adres,1,Pos(';',adres)-1);
  Delete(adres,1,Pos(';',adres));
 end;
 setLength(adresy,i+1);
 dlugosc:=i;
 adresy[i]:=adres;

 for i:=0 to dlugosc do
   ShowMessage('Adres nr '+IntToStr(i+1)+' to: '+adresy[i]); // wyświetlanie
end;

no nie wiem czemu nie działa tamto.

0

Już wszystko działa (jupi) - bardzo dziękuję, dobrze, że sa jeszcze tacy pomocni ludzie na tym forum :D

0

PS.: Przepraszam, że jeszcze się spytam, ale po przeanalizowaniu kodu mam jeszcze jedno pytanko:

Moje wysyłanie meili opiera sie na funkcji: Send(Edit1.Text, Memo1.Lines.Text); gdzie: Edit1.Text to adres meil a Memo1.lines.text to wiadomość. No i <ort>prubowałem </ort>już z tym: for i := 0 to D do ShowMessage(A[i]); ale bym musiał przechwycic do sekunde ten komunikat, wyciągał tekst z jego label'a i wrzucał jako adres meil. Troche to niepraktyczne, ale by (chyba) zadziałało, lecz ort!, że jest <ort>prostrzy </ort>sposób, aby wykonać procedure: Send(Edit1.Text, Memo1.Lines.Text); zwby zamiast Edit1.text znajdywała się jakos pozycja z A[i]. Prosił bym o ostatnią (w tym temacie ;p) pomocną dłoń i "nakierowanie" mnie jak można to wszystko ułatwić. Z góry dzięki i pozdrawiam ;)

0

wystarczy że te wszystkie vary zadeklarujesz pod Form1:TForm1 zamiast w procedurze i będziesz miał je globalne i wtedy tylko raz będzie wystarczyło wywołać procedurę a potem odwoływać się do adresy[i]; albo tylko raz przy wysyłaniu meila:

var adresy:array of string;
i:integer;
dlugosc:integer;
adres:string;
begin
adres:='[email protected];[email protected];[email protected];[email protected];[email protected]';
i:=0;
while Pos(';',adres)<>0 do begin
 Inc(i);
 setLength(adresy,i);
 adresy[i-1]:=Copy(adres,1,Pos(';',adres)-1);
 Delete(adres,1,Pos(';',adres));
end;
setLength(adresy,i+1);
dlugosc:=i;
adresy[i]:=adres;

for i:=0 to dlugosc do
  SendMail(adresy[i],Memo1.Lines.Text);
end;

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