![]() |
String zerlegen, auslesen und weiterverwenden
Hi Leute...
meinereiner hat mal wieder ne Frage : Da ich mich mit Strings bzw. dem auslesen von Strings noch nicht so auskenne, bräuchte ich mal (wieder) Eure Hilfe. Also : (kleiner vorlauf): Ich habe ein DBGrid, markiere mehrere Zeilen, führe dann eine prozedur durch... also das ganze in einer Zählschleife von
Delphi-Quellcode:
Aber das ist eher Nebensache;
i := o to blablagrid -1 .....
Ich schreibe mir während dem Durchlauf dieser Schleife die ganzen Auftragsnummern in einen Tempstring - in diesem stehen dann die Auftragsnummern mit Komma voneinander getrennt. Also z.B. tempstring enthält dann '2,14,23,48,55' Soooo....nun würde ich gern in einem neuen Schritt ermitteln wieviel Auftragsnummern in diesem String drinstehen weil ich eine weitere Zählschleife machen will. ich nehme an das würde ich mit
Delphi-Quellcode:
machen
for i := 0 to length(tempstring)-1 do..
und nun würde ich gern den tempstring immer bis zum komma auslesen und dann zu der jeweiligen auftragsnummer etwas ausführen. und das halt jeweils für alle auftragsnummern, die in dem tempstring drinstehen. wie kann ich das realisieren ? vielen dank schonmal mfg carsten |
Re: String zerlegen, auslesen und weiterverwenden
die funktion pos ist dein freund!
|
Re: String zerlegen, auslesen und weiterverwenden
![]() |
Re: String zerlegen, auslesen und weiterverwenden
Nun ja, du könntest zum einem den String Zeichen für Zeichen abarbeiten und prüfen was dat für'n Zeichen ist ... wenn es ein komma ist, dann steht ja die Zahl zwischen diesem und dem vorher gefundenem Komma.
Es ist aber auch möglich, per PosEx das nächste komma zu suchen. oder du machst es dir einfacher: entder ein dynamisches array
Delphi-Quellcode:
oder noch einfacher ... ein TStringList, da kann man per .add etwas hinzufügen und mit .count die Anzahl erhalten.
Var XYZ: Array of String;
//wert hinzufügen SetLength(XYZ, Length(XYZ) + 1); XYZ[High(XYZ)] := ...; Anzahl := Length(XYZ); @idp: pos findet nur das erste komma :zwinker: und luckies explode kann man natürlich auch verwenden, aber warum erst die einzelstrings zusammenmixen und dann wieder trennen, wenn man die ja gleich getrennt lassen kann? |
Re: String zerlegen, auslesen und weiterverwenden
Zitat:
|
Re: String zerlegen, auslesen und weiterverwenden
Moin Leute...
hatte gestern ein wenig rumprobiert aber irgendwie komme ich auf keinen grünen Zweig :( Mit den ganzen Funktionen hatte ich bisher noch nie gearbeitet, daher sind die absolut neu für mich und ich hab bei den Teilen irgendwie ein Verständnisproblem :( Ich glaub ich bekomme hin dass ich mir per pos das erste komma vielleicht auch alle weiteren kommasanzeigen bzw auslesen lassen kann, aber ich wüsste so nicht was mir das bringt *aufdemschlauchsteh* vom denken her würde ich das so angehen : für die gesamtlänge des tempstrings soll immer bis zum nächsten komma gelesen werden und für die zahlen jeweils vor dem komma "als gesamtes" ( ist ja eine auftragsnummer z.b. 13 oder 128) möchte ich dann eine prozedur ausführen (abarbeitung der einzelnen zahlenblöcke) hoffe ihr versteht was ich meine *solangsamverzweifelt* mfg carsten |
Re: String zerlegen, auslesen und weiterverwenden
Du erstellst Dir eine TStringList-Instanz, weist dieser deinen String in die Eigenschaft CommaText zu und vòila, du hast:
1. die Anzahl der Auftragsnummern (Count). 2. Die Nummern selber (Items[Index]). Ich hoffe, ich konnte helfen. |
Re: String zerlegen, auslesen und weiterverwenden
Hai stonimahoni,
wie schon erwähnt würde ich das ganze mit einer StringListe machen. Das ganz könnte dann zum Beispiel so aussehen:
Delphi-Quellcode:
procedure TForm1.btn_GetAuftraegeClick(Sender: TObject);
var sl: TStringList; ndx: integer; begin if DBGrid1.SelectedRows.Count > 0 then // Ist etwas markiert? begin sl := TStringList.Create; // StringListe erzeugen try with DBGrid1.DataSource.DataSet do begin for ndx := 0 to DBGrid1.SelectedRows.Count - 1 do // Alle markierten Datensätze durchlaufen begin GotoBookmark(pointer(DBGrid1.SelectedRows.Items[ndx])); // Zum markierten DS springen sl.Add(FieldByName('auftragsnummer').AsString); // Auftragsnummer aus der Tabelle lesen end end; ShowMessage(Format('Es gibt %d Auftragsnummern', [sl.Count])); // Anzahl der Einträge anzeigen finally sl.Free; end; end; end; |
Re: String zerlegen, auslesen und weiterverwenden
damit man mit den string-funktionen lernt...
Delphi-Quellcode:
ps. hoffe, das die string-indizes richtig sind
var
stelle:integer; anr:integer; // auftragsnummer anrstr:string // hilfsstring ... // z.b. tempstr='2,14,23,48,55,' while tempstr<>'' do begin stelle:=pos(',',tempstr); // position des ersten auftretens von ',' if stelle>0 then // stelle gefunden anrstr:=copy(tempstr,stelle-1); // kopiert aus tempstr die stellen 1..stelle-1 if trystrtoint(anrstr,anr) then; // anrstr in zahl umwandeln machwas(anr) // verarbeiten else showmessage('keine zahl'); delete(tempstr,1,stelle); // löschen bis nach 1. komma end else tempstr:=''; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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