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ę...
pos(substr;str);
zwraca pozycje substr w str a jesli nie ma daje 0; potem juz tylko skopiowac
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...
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;
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ć :(
patrz post wyżej dałem kod
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 ? :/
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.
Już wszystko działa (jupi) - bardzo dziękuję, dobrze, że sa jeszcze tacy pomocni ludzie na tym forum :D
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 ;)
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;