AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ExtractStrings ohne Ausnahmen in ""

Ein Thema von frieder2008 · begonnen am 8. Mär 2009 · letzter Beitrag vom 8. Mär 2009
Antwort Antwort
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#1

ExtractStrings ohne Ausnahmen in ""

  Alt 8. Mär 2009, 13:31
Moin,

ich versuche gerade irgendwie, die ExtractStrings-Funktion (D5) so umzubauen, dass sie keine Sonderstellung für Anführungszeichen vergibt. Heißt: Die Funktion nimmt ", ', Lehrzeichen und Zeilenumbruch als Trennungszeichen; Trennzeichen innerhalb zweier Anführungszeichen werden ignoriert. Bsp.:

String:
Hans sucht Jürgen, und sagt ihm "Du Schweinehund"

Dann ergibt die zurückgegebene Liste (Komma auch als Trnnzeichen definiert).
Hans
sucht
Jürgen
und
sagt
ihm
Du Schweinehund

Ich brauche die Funktion jetzt aber so, dass sie ausnahmslos alle Sonderzeichen (also Nicht-Buchstaben) als Trennzeichen, d.h. Anführungzeichen IMMER als Trennzeichen ohne Sonderregel interpretiert.

Ok, ich hoffe, ich konnte mich verständlich machen. Problem jetzt: ich verstehe die VCL-Routine nicht bzw. finde nicht den Abschnitt für diese "Ausnahmeregel"..

Funktion aus der VCL:

Delphi-Quellcode:
  function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar;
  Strings: TStrings): Integer;
var
  Head, Tail: PChar;
  EOS, InQuote: Boolean;
  QuoteChar: Char;
  Item: string;
begin
  Result := 0;
  if (Content = nil) or (Content^=#0) or (Strings = nil) then Exit;
  Tail := Content;
  InQuote := False;
  QuoteChar := #0;
  Strings.BeginUpdate;
  try
    repeat
      while Tail^ in WhiteSpace + [#13, #10] do Inc(Tail);
      Head := Tail;
      while True do
      begin
        while (InQuote and not (Tail^ in ['''', '"', #0])) or
          not (Tail^ in Separators + [#0, #13, #10, '''', '"']) do Inc(Tail);
        if Tail^ in ['''', '"'] then
        begin
          if (QuoteChar <> #0) and (QuoteChar = Tail^) then
            QuoteChar := #0
          else QuoteChar := Tail^;
          InQuote := QuoteChar <> #0;
          Inc(Tail);
        end else Break;
      end;
      EOS := Tail^ = #0;
      if (Head <> Tail) and (Head^ <> #0) then
      begin
        if Strings <> nil then
        begin
          SetString(Item, Head, Tail - Head);
          Strings.Add(Item);
        end;
        Inc(Result);
      end;
      Inc(Tail);
    until EOS;
  finally
    Strings.EndUpdate;
  end;
end;
Kann mir jemand einen Hinweis geben?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

Re: ExtractStrings ohne Ausnahmen in ""

  Alt 8. Mär 2009, 13:40
hast du von deinem D5 die Quellcodes?

da kannst du GetParamStr nutzen ...
damit zerlegt Delphi-Referenz durchsuchenParamStr und Delphi-Referenz durchsuchenParamCount die Parameter.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#3

Re: ExtractStrings ohne Ausnahmen in ""

  Alt 8. Mär 2009, 13:59
Zitat:
hast du von deinem D5 die Quellcodes?
Ja.

Hm, versteh' ich aber nicht ganz. Sowohl D-Hilfe als auch Parameterlisten kennen bei mir (D5) getparamstr nicht.

Und ich sehe auch (noch) nicht, wo paramstr in dem Delphi-Code von extractstrings ist.

Woran ich dachte, war, einfach die ExtractStrings-Funktion zu kopieren und entsprechend abzuändern.


Gruß & thx a lot
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

Re: ExtractStrings ohne Ausnahmen in ""

  Alt 8. Mär 2009, 14:14
drum fragte ich ja, ob du die Quellcodes von Delphi hast ... das ist eine interne Funktion.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#5

Re: ExtractStrings ohne Ausnahmen in ""

  Alt 8. Mär 2009, 14:44
kapia eck immer noch nich
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

Re: ExtractStrings ohne Ausnahmen in ""

  Alt 8. Mär 2009, 14:54
Wenn du die Quellcodes des Delphieigenen Units hast, dann brauchst dir nur mal


ich hatte gar was Kleines fast fertig (bis der PC verreckt ist )
muß aber nun los ... mach's eventuell heut abend nochmal z.B. die Punktion ParamStr ansehn und gucken was die macht.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#7

Re: ExtractStrings ohne Ausnahmen in ""

  Alt 8. Mär 2009, 20:49
OK, hab grad nochmal nachgesehn ... D7 hat diese Funktion noch nicht, wurde also doch erst später eingeführt

hier wird erstmal nur das ' ' als Trennzeichen verwendet und wenn ein Teil mit " anfängt, dann bleibt er zusammen...
Delphi-Quellcode:
Function ExplodeEx(Const S: String): TStringDynArray;
  Var i, i2: Integer;

  Begin
    Result := nil;
    i := 1;
    While i <= Length(S) do Begin
      If S[i] = '"Then Begin
        Inc(i);
        i2 := PosEx('"', S, i);
      End Else i2 := PosEx(' ', S, i + 1);
      If i2 = 0 Then i2 := Length(S) + 1;
      SetLength(Result, Length(Result) + 1);
      Result[High(Result)] := Copy(S, i, i2 - i);
      If (i2 < Length(S)) and (S[i2] = '"') and (S[i2 + 1] = ' ') Then Inc(i2);
      i := i2 + 1;
    End;
  End;
Delphi-Quellcode:
x := ExplodeEx('12 "34 56" 7 89');

// Ergebnis:
x[0] = '12'
x[1] = '34 56'
x[2] = '7'
x[3] = '89'
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#8

Re: ExtractStrings ohne Ausnahmen in ""

  Alt 8. Mär 2009, 20:53
Klasse, danke! Da kann ich ma versuchen, weiterzubauen!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz