AGB  ·  Datenschutz  ·  Impressum  







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

String zerlegen

Ein Thema von Luckie · begonnen am 11. Mai 2006 · letzter Beitrag vom 15. Mai 2006
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#21

Re: String zerlegen

  Alt 11. Mai 2006, 11:56
Ich kenne ja die Namen und jeweniger ich mit den Strings hantieren muss, desto besser.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#22

Re: String zerlegen

  Alt 14. Mai 2006, 14:43
Nun hat sich leider ein problem ergeben: Was wenn in dem String ein Bezeichner vorkommt, den ich nicht kenne und somit nicht im array definieren kann? Ich habe mir jetzt überlegt, dass man da doch irgendwas mit Regulärenausdrücken machen können müsste, da ja alle Bezeichener gleich lang sind, nur Großbuchstabe von A bis Z und die letzten drei zeichen müssen eine Ziffer sein. Icxh wei´ß, dass es da irgendwo eine Delphi Unit gibt, TRegExp oder so. Wäre das damit lösbar? Liefert mir die Unit alles Positionen wo der Ausdruck um String vorkommt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#23

Re: String zerlegen

  Alt 14. Mai 2006, 23:28
So, ich habe mir jetzt mal die Unit TRegExpr besorgt. Nur, wie müsste denn der Ausdruck aussehen, der eine Zeichenkette nur aus Großbuchstaben, mit 11 Zeichen Länge findet, wobei die letzten drei Zeichen Ziffern sein müssten? ich habe noch nie was mit Regulärenausdrücken gemacht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#24

Re: String zerlegen

  Alt 14. Mai 2006, 23:40
Luckie, was spricht eigentlich gegen die Lösung von onlinekater (Beitrag #20)? Die funktioniert doch zumindest für dein Beispiel bestens, und du benötigst kein Array mit allen Namen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#25

Re: String zerlegen

  Alt 14. Mai 2006, 23:51
Ups, daran habe ich gar nicht mehr gedacht. Danke für den Hinweis.

Jetzt weiß ich, warum ich sie nicht benutzt habe: Ich habe die Schleifen nicht verstanden. Könnte mir das noch mal jemand erläutern bitte?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.889 Beiträge
 
Delphi 12 Athens
 
#26

Re: String zerlegen

  Alt 15. Mai 2006, 09:45
Ok, hier kommt der Code nochmal kommentiert:

Delphi-Quellcode:
function DoValueList (ZeiKett:string) : TStringList;
// ****************************************************************************
// Auflösen einer Zeichenkette des Formates "NAME1=WERT1 NAME2=WERT2
// NAME3=WERT3 ......"
// in eine StringList
// ****************************************************************************
// erstellt von Thomas Breitkreuz
// email: [email]tbreitkreuz@breitkreuz-datentechnik.de[/email]
// Codeschnippsel zur Benutzung für Jedermann freigegeben
// ****************************************************************************
var
  s : String;
  i : integer;
begin
  s := ZeiKett;
  Result := TSTringList.Create;
  // ausführen, solange NAME=VALUE - Paare vorhanden sind (diese werden wärend
  // der Bearbeitung laufend aus der Zeichenkette gelöscht
  while pos ('=', s) > 0 do
  begin
    i := Length (s);
    // vom Ende des Strings an solange zurückgehen, bis ein = Zeichen ohne
    // führendes Leerzeichen gefunden wird, es wird davon ausgegangen, daß
    // das = Zeichen dem NAME unmittelbar folgt, dadurch können auch
    // = Zeichen in den Values vorhanden sein, sofern ein Leerzeichen vorgesetzt
    // ist
    while (s[i] <> '=') or (s [i-1] = ' ') do dec (i);
    // nun wird von dem gefundenen = Zeichen aus das nächste Leerzeichen bzw.
    // der Anfang der Zeichenkette gesucht, es wird davon ausgegangen, daß
    // jedem NAME, der nicht am Anfang der Zeichenkette steht, ein Leerzeichen
    // vorausgeht
    while ((i > 0) and (s [i] <> ' ') ) do dec (i);
    // Jetzt wird das gefundene NAME=VALUE-Paar als ersten Eintrag in die
    // Resultliste eingefügt
    Result.Insert(0, Trim(copy (s, i+1, Length (s))));
    // und dann aus der Zeichenkette gelöscht
    delete (s, i +1, Length (s));
    // sollte vor dem ersten NAME=VALUE-Paar noch etwas stehen, so wird dies
    // hier ausgeschnitten und unter dem NAME "$$$TRAILER$$$" in die Resultliste
    // eingefügt
    if (i = 0) and (Length (s) > 0) then
    begin
      Result.Insert(0, '$$$TRAILER$$$=' + Trim (s);
      s := '';
    end;
  end;
end;
Beim Kommentieren ist mir noch eine Unzulänglichkeit aufgefallen: Die Funktion verharrte in einer Endlosschleife, wenn am Anfang der Zeichenkette ein ' =' vor einem "NAME=" vorkam.
Deshalb habe ich noch den Trailer eingeführt.

Ich hoffe, meine Erklärungen sind ausreichend, ansonsten bitte nachfragen.

btw: Hat einer ne Idee, unter welchem Titel man das in die Codelib stellen könnte?

Gruß

Thomas
[Edit] Delphi-Kommentar korrigiert [/Edit]
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#27

Re: String zerlegen

  Alt 15. Mai 2006, 09:57
Besten Dank, jetzt ist alles klar.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#28

Re: String zerlegen

  Alt 15. Mai 2006, 10:18
Das Problem is zwar schon gelöst, aber für all die, dies interessiert, bzw. die, die diesen Thread finden und was Allgemeineres suchen: TDivStrListTDivStrList

In diesem Fall ist aber onlinekaters Version natürlich kürzer und mit weniger Overhead verbunden...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 09:30 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