![]() |
Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Hallo.
Nach langer Zeit wieder mal ein Beitrag von mir. Es geht hier darum, dass ich eine Textdatei ausgelesen habe. Diese wurde in ein String geschrieben damit ich damit arbeiten kann. Die Textdatei ist von einer Datenbank. Deshalb steht alles in einer Zeile. Ich brauche dort alle E-Mails wirklich alle. Beispiel: INSERT INTO bb1_users VALUES ('01', 'MoYo','pw','pw','MoYo64@hotmail.de',' So gehts halt immer weiter. Ich habe mir überlegt, dass ich bis zum @ suchen lasse. Danach von dort aus runter gehe bis zum '. Von dem ' gehts wieder hoch bis zum nächsten '. Und das halt was dazwischen liegt kopiere. Natürlich muss ich die kopierten ... irgendwo reinschreiben. Müsste mit Arrays möglich sein. Dies wird halt so oft gemacht bis nix mehr da ist. Habe zwar eine Idee ... aber keine Ahnung wie ich es lösen soll. Hoffe, dass es etwas verständlich ist und ihr mir helfen könnt. MFG, MoYo |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Ich würde anhand der Kommas trennen.
|
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Zitat:
Wie gesagt ich kann mir zwar vorstellen was ich machen kann ... aber weiß einfach nicht wie ... ... Habe jetzt etwas weiter überlegt. Position := Pos(SubStr, S); Hiermit bestimme ich die Position vom 1. @. Es hat die Position = 144. Wie kann ich damit mit PosX das , oder ' davor suchen lassen. Dann könnte ich ja die Position vom , oder ' bestimmen lassen. Mit dem Suche ich dann das nächste , oder '. Somit wüsste ich dann meine 1. E-Mail. Kopieren lassen. In Array schreiben und das nächste suchen. Jetzt gehts zur Umsetzung aber wie :D |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Delphi-Quellcode:
p := 0;
for i := 1 to 4 do p := PosEx( ',', s, p); |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Boing. Falscher gehts kaum, mkinzler.
Zitat:
Delphi-Quellcode:
Sonst wird beim ersten mal Null zurückgegeben, weil der Offset Null ist, und wenn man das behoben hat, wird jedesmal das gleiche gefunden, deshalb p+1.
p := 1;
for i := 1 to 4 do p := PosEx( ',', s, p+1); |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Zitat:
Sucht der nicht hier mit das nächste , ? Es wäre aber wichtig zuerst das , vor dem @ zu finden und danach erst das , nach dem @ |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Nimm wenn, dann bitte meinen Code!
Der sucht die Position des vierten Kommas, und zwischen dem vierten und dem fünften Komma steht doch die EMail-Adresse!? |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Zitat:
Meines Erachtens wäre es wesentlich sinnvoller, die Möglichkeiten des Datenbanksystems zu nutzen, um an die einzelnen Email-Adressen zu kommen. In der DB werden diese ja wohl nicht in einem einzigen Datenfeld eines einzigen Datensatzes stehen. Gruß onlinekater |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Er sollte auch das davor finden, wenn man meine Fehler korrigiert
|
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Zitat:
Ich weiß, dass es z.B. mit PHP ohne Probleme geht so wie ich es mir denke. Will aber auch mit Delphi klar kommen. |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
wie wär's mit 'n kleinen schleifchen?
Delphi-Quellcode:
damit umgehste das problem,dass in einem PW auch mal ein oder mehrere kommas sein können... ausserdem brauchste den string nur einmal durchlaufen. sollte daher recht flott gehen...
program Project2;
{$APPTYPE CONSOLE} uses sysutils; function getEMailAddy(s: string): string; var i: integer; KommaCount: integer; quoted: boolean; begin quoted := false; result := ''; KommaCount := 0; for i := 1 to length(s) do begin if s[i] = '''' then quoted := not quoted; if not quoted and (s[i] = ',') then begin inc(KommaCount); if KommaCount > 4 then break; continue; end; if (KommaCount = 4) and (s[i] <> '''') then result := result + s[i]; end; end; var s: string = 'INSERT INTO bb1_users VALUES (''01'', ''MoYo'',''pw'',''pw'',''MoYo64@hotmail.de'','' '; begin writeln(GetEMailAddy(s)); //teststring readln; end. grüsse gg |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Guten Morgen,
hier noch eine Funktion, welche auch mit maskierten Apostrophen fertig wird:
Delphi-Quellcode:
Grüße vom marabu
function ExtractValue(const s: string; index: Integer): string;
const PREFIX = '('; SUFFIX = ')'; QUOTE = ''''; var iStart, iLength: Integer; begin with {Classes.}TStringList.Create do begin iStart := Succ(Pos(PREFIX, s)); iLength := Pos(SUFFIX, s) - iStart; CommaText := Copy(s, iStart, iLength); if index < Count then Result := {SysUtils.}AnsiDequotedStr(Strings[index], QUOTE) else Result := ''; Free; end; end; |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Das würde ich unbedinngt mit Regular Expressions und TRegExpr lösen:
![]()
Delphi-Quellcode:
// Diese einfache Funktion extrahiert alle E-Mail-Adressen aus dem InputString
// und legt eine Liste dieser Adressen in den Rückgabewert function ExtractEmails (const AInputString : string) : string; const EmailRE = '[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)+' var r : TRegExpr; begin Result := ''; r := TRegExpr.Create; // Erzeuge Objekt try // garantiere Speicherfreigabe r.Expression := EmailRE; // der R.A. wird automatisch in die interne Struktur übersetzt // innerhalb der Zuweisung an diese Eigenschaft if r.Exec (AInputString) then REPEAT Result := Result + r.Match [0] + ', '; UNTIL not r.ExecNext; finally r.Free; end; end; begin ExctractEmails ('My e-mails is [email]anso@mail.ru[/email] and [email]anso@usa.net[/email]'); // gibt zurück: 'anso@mail.ru, [email]anso@usa.net[/email], ' end. |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Zitat:
Ich werde es damit testen. Ich danke euch allen :) Sollte ich Probleme haben sag ich bescheid. |
Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
Und was spricht gegen
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz