Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Suche Hilfe für Stringverarbeitung mit Copy und Pos ... (https://www.delphipraxis.net/97559-suche-hilfe-fuer-stringverarbeitung-mit-copy-und-pos.html)

grenzgaenger 12. Aug 2007 23:53

Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
 
wie wär's mit 'n kleinen schleifchen?

Delphi-Quellcode:
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.
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...
grüsse
gg

marabu 13. Aug 2007 08:27

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:
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;
Grüße vom marabu

SurfDuDe 13. Aug 2007 09:18

Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
 
Das würde ich unbedinngt mit Regular Expressions und TRegExpr lösen:

http://www.regexpstudio.com/DE/TRegExpr/Help/About.html


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.

MoYo 13. Aug 2007 09:44

Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
 
Zitat:

Zitat von SurfDuDe
Das würde ich unbedinngt mit Regular Expressions und TRegExpr lösen:

http://www.regexpstudio.com/DE/TRegExpr/Help/About.html


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.

Diese Arbeitsweise kenne ich von PHP. Wundervoll, dass jemand auch so etwas für Delphi gemacht hab.
Ich werde es damit testen. Ich danke euch allen :) Sollte ich Probleme haben sag ich bescheid.

Luckie 13. Aug 2007 09:45

Re: Suche Hilfe für Stringverarbeitung mit Copy und Pos ...
 
Und was spricht gegen ExplodeExplode aus der Code-Lib?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz