![]() |
Mehrere Werte aus String extrahieren
Einen wunderschönen,
ich versuche aus einem String z.B. 22 --- 3.16 --- 21 --- 10 die einzelnen Zahlenwerte zu extrahieren. Das Problem ist, dass der nächste Bspl String so aussehen könnte: 465 --- 3 --- 21 --- 4 Das heißt, ich kann die genauen Positionen zum wegschneiden der Trennstriche nicht festlegen, da der Abstand zum nächsten Wert variabel ist. Ein einfaches ersetzen mit StringReplace scheidet ebenfalls aus. Könnt ihr mir helfen? |
Re: Mehrere Werte aus String extrahieren
Wenn es immer Leerzeichen---Leerzeichen ist dürfte das doch kein Problem sein.
|
Re: Mehrere Werte aus String extrahieren
Hallo und herzlich Willkommen in der DP :cheer:
Du kannst mit den Befehlen Pos und PosEx arbeiten. Du kannst aber auch mit StringReplace arbeiten. Du suchst nach ' --- ' und ersetzt dieses durch ';'. Danach suchst Du Dir noch die Funktion ![]() |
Re: Mehrere Werte aus String extrahieren
Kann man davon ausgehen, daß zwischen den Zaheln immer ' --- ' steht?
Wenn ja, hast du doch schon deinen Ansatz. - mit Pos nach dem nächsten ' --- ' suchen - von Anfang bis zu dieser Position den String kopieren - mit StrToIntDef umwandeln in Zahl - von Anfang bis Position + Länge von ' --- ' abschneiden - das ganze wieder von vorn anfangen fettisch |
Re: Mehrere Werte aus String extrahieren
Oder mit Hilfe einer StringListe( .Delimiter, .DelimitedText)
|
Re: Mehrere Werte aus String extrahieren
Ich danke für die schnellen Reaktionen!
Sowohl DelimitedText, als auch PosEx sind interessante Lösungsansätze, welche mir gefehlt haben. Ich habe es kurz überflogen und ausprobiert. Mein Problem ist diese Strings erst einmal zu isolieren und anschließend in eine Liste/Tabelle zu übertragen. Ich gebe zu ich habe noch nicht viel Zeit investiert, habe momentan Nachtschicht^^ Setze mich Morgen noch einmal dran. THX |
Re: Mehrere Werte aus String extrahieren
Einfach die drei Minuszeichen mit StringReplace durch ein Pipezeichen | ersetzen.
Das ist der Haupttrick, denn das vereinfacht die weitere Verarbeitung und ermöglicht den Einsatz von Standardverfahren Dann mit oben erwähnter Explode() Funktion oder mit Hilfe TStrings.DelimitedText die Daten in Einzelstrings zerlegen. Die Leerzeichen werden dann jeweils mit Trim() entfernt. Oder man ersetzt gleich den String ' ---- ' durch das Pipezeichen; dann sind die Leerzeichen schon eliminiert. |
Re: Mehrere Werte aus String extrahieren
Vielen Dank- Das hat schon einmal wunderbar geklappt! Ich habe es mit dem Beispiel von
![]() 22 3.16 21 10 Dazu kommen aber noch einmal eine unbestimmte Anzahl Einträge nach dem selben Muster. (Max 122600) Das heißt ich habe eine ziemlich lange Liste mit Werten. Diese möchte ich nun automatisch in ein Stringgrid (4x122600) einsortieren lassen. Und dafür fehlt mir die Funktion einer Schleife, die jede Zeile entsprechend einfügt. Gibt es da irgendeine Möglichkeit? |
Re: Mehrere Werte aus String extrahieren
klar gibs da ne möglichkeit :zwinker:
Nimm am besten nen Listview!! Da kannste dann deine 4 Spalten eingeben (bei columns)!! Damit diese angezeigt werde musst du noch den "viewstyle" auf "vsReport" setzen!! dann nimmst du ungefähr sone schleife...
Delphi-Quellcode:
for i:= 0 to MAX do
with Listview.Items.Add do begin caption:= 1.Wert; Subitems.Add(2.Wert); Subitems.Add(3.Wert); Subitems.Add(4.Wert); end; |
Re: Mehrere Werte aus String extrahieren
Praktisch- Das scheint der Durchbruch zu sein! Aber wie bekomme ich es hin, dass die Formatierung des ursprünglichen String ( 22 --- 3.16 --- 21 --- 10) erhalten bleibt?
Denn ich habe ja nicht nur die 4 Werte untereinander stehen, sondern 490.400 Werte, bei denen es gilt sie weg zusortieren. Also irgendwas in die Richtung: Per Schleife jede 4 Zeile in das dafür angelegte Item in Listview eintragen zu lassen!?! |
Re: Mehrere Werte aus String extrahieren
Hallo!
Wenn du nur jede vierte Zeile "auseinanderlegen" willst dann kannst es ja so machen:
Delphi-Quellcode:
Ich hoffe es war eine Hilfe!
//Schleife
for i := 0 to Max do begin if i mod 4 = 1 then begin { Code } end; end; lg |
Re: Mehrere Werte aus String extrahieren
Stehen alle Werte in einer Zeile oder jeweils 4?
|
Re: Mehrere Werte aus String extrahieren
Zitat:
Dazu aber noch 122600 andere Zeilen nach dem selben Muster (aber andere Werte- also 122600 x 4 Werte) Die Werte habe ich alle trennen können, so dass sie nun (Das Muster/die Stringfolge gleichbleibend) in einer Listbox untereinander stehen. (Also pro Zeile ein Wert: 122600 x 4 = 490.400 Werte/Zeilen) Diese Werte möchte ich nun aus der Listbox in ein ListView einsortieren lassen, so dass (Man beachte das Muster: 22 --- 3.16 --- 21 --- 10) diese immer gleichbleibend in die ListView übertragen werden. Anfang der Werte aus der Listbox: 22 3.16 21 10 (fiktive/nicht existierende Trennlinie) 5499 1.5 1 100 (fiktive/nicht existierende Trennlinie) . . . Anhand der untereinander stehenden Werte: 22 3.16 21 10 müsste die 1. komplette Zeile des Listviews also (zusammengesetzt aus 4 Columns) so aussehen: 22 | 3.16 | 21 | 10 Und die 2. komplette Zeile, müsste also 5499 | 1.5 | 1 | 100 ergeben, usw..... Die funktionale Schleife nur jede 4. Zeile zu übertragen ist sehr interessant, aber in meinem Fall leider nicht das Richtige. Ich bin ratlos und mal gespannt, ob ich meine Gedanken klar artikulieren konnte. |
Re: Mehrere Werte aus String extrahieren
hoi,
Zitat:
durchlauf die zeilen deines memos, pro zeile : - den string der zeile trennen wie bisher mit stringlist + DelimitedText - Listview füllen mit Werten aus Stringlist [0,1,2,3] dann nächste zeile usw. oder du durchläufst deine listbox und verarbeitest immer 4 Werte - prüfen über mod 4 ähnlich wie hier : Zitat:
|
Re: Mehrere Werte aus String extrahieren
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
man kann sich den Umstand zu nutze machen, dass der Feldseparator Leerzeichen enthält. Eine auf einer virtuellen ListView aufsetzende Demo habe ich mal angehängt. Sie erzeugt beim Start eine Testdatei im TEMP-Verzeichnis und löscht sie bei Programmbeendigung. Wird die Demo mit dem Namen einer existierenden Datei aufgerufen, so werden die echten Daten benutzt. Grüße vom marabu |
Re: Mehrere Werte aus String extrahieren
Nachdem ich die ganze Liste in einer Schleife Zeile für Zeile hab durchlaufen lassen (Aus jeder Zeile die Werte trennen und dann in die Listview übertragen) habe ich in der Listview alle Einträge stehen! Dabei geholfen hat mir maaßgeblich die Funktion:
Delphi-Quellcode:
Ich danke schön :hello: :hello: :hello:
for i:= 0 to MAX do
with Listview.Items.Add do begin caption:= 1.Wert; Subitems.Add(2.Wert); Subitems.Add(3.Wert); Subitems.Add(4.Wert); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 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-2025 by Thomas Breitkreuz