Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   String zerlegen (https://www.delphipraxis.net/69170-string-zerlegen.html)

OregonGhost 11. Mai 2006 10:07

Re: String zerlegen
 
Ich glaube, marabu meinte, dass die Länge eines bestimmten Feldes in jedem Datensatz gleich lang ist. Also deinem Beispiel entsprechend UNTEEICH027 hat immer Länge 1, LIEFMMER029 hat immer Länge 6 etc. Die Leerzeichen hinter den Feldern (bzw. führenden Nullen) deuten darauf hin. Das wäre mal anhand deiner Beispiel-Datensätze zu überprüfen :)

Luckie 11. Mai 2006 10:10

Re: String zerlegen
 
Das könnte sein. Hm, mal sehen, wa sich daraus bauen kann.

bernau 11. Mai 2006 10:18

Re: String zerlegen
 
Eine Liste der Schlüsselwörter festlegen.

Delphi-Quellcode:
const
  MeineSchluesselwortliste: array [1..5] of string =('BELEMMER025','GESCEICH026','UNTEEICH027','LIEFMMER029','KUNDMMER032');

In dem String mit pos nach den Schlüsselwörtern suchen und vor den schlüsselwörtern in den String ein #13#10 einfügen. Danach in eine TStringlist einlesen.

Delphi-Quellcode:
var
  a:integer;
  x:integer;
....


  for x:=1 to 5 do
    begin
      a:=Pos(MeineSchluesselwortliste[x],DerDatenstring);
      if a>0 then
        insert(#13+#10,DerDatenstring,a);
    end;
   
   MeineStringliste.text:=derDatenstring;
Dann nacheinander mit MeineStringliste.IndexOfName die Werte herauspicken.


(Einfach runtergeschrieben. Nicht getestet.)

Gerd

Luckie 11. Mai 2006 10:21

Re: String zerlegen
 
Das klingt genial. :P Wenns klappt, könnte ich dich küssen. ;)

Klaus01 11. Mai 2006 10:25

Re: String zerlegen
 
vielleicht eine dumme Idee, aber wenn die Felder immer die gleiche Größe haben
könnte man doch auch mit einer record Struktur arbeiten:

Delphi-Quellcode:
TDataSet = record
  case boolean of
    true : s:String;
    false: a:String[10],
            b:string[15],
            c:string[10],
            d:string[1];
end;
Du kannst dann in TDataSet.s den ganzen String einlesen
und mit TDataSet.a das erste Feld auslesen, mußt es nur noch in Feldnamen und Wert trennen.

Nur so eine Idee.

Grüße
Klaus

OregonGhost 11. Mai 2006 10:31

Re: String zerlegen
 
Da die Namen der Felder aber im String vorkommen, geht das nicht so ohne Weiteres, sie müssten vorher entfernt werden :)

Klaus01 11. Mai 2006 10:35

Re: String zerlegen
 
Zitat:

Zitat von OregonGhost
Da die Namen der Felder aber im String vorkommen, geht das nicht so ohne Weiteres, sie müssten vorher entfernt werden :)

..das war mir schon bewußt.

Zitat:

Zitat von Klaus01
das erste Feld auslesen, mußt es nur noch in Feldnamen und Wert trennen.

Grüße
Klaus

Hawkeye219 11. Mai 2006 10:37

Re: String zerlegen
 
@Klaus01

Deine Idee wird aber aus zwei anderen Gründen nicht funktionieren:
1.) dynamische Strings können in varianten Records nicht verwendet werden
2.) ShortStrings besitzen ein Längenbyte, das im Datenrecord nicht enthalten ist.

Gruß Hawkeye

Luckie 11. Mai 2006 10:43

Re: String zerlegen
 
Das könnte auch funktionieren, aber bernaus Methode funktioniert, wie es scheint und sie ist schön einfach und das ist immer ein gutes Zeichen. ;)

TBx 11. Mai 2006 10:51

Re: String zerlegen
 
Hab auch noch ein Codeschnippsel gefunden ...

Delphi-Quellcode:
function DoValueList (ZeiKett:string) : TStringList;
var
  s : String;
  i : integer;
begin
  s := ZeiKett;
  Result := TSTringList.Create;
  while pos ('=', s) > 0 do
  begin
    i := Length (s);
    while (s[i] <> '=') or (s [i-1] = ' ') do dec (i);
    while ((i > 0) and (s [i] <> ' ') ) do dec (i);
    Result.Insert(0, Trim(copy (s, i+1, Length (s))));
    delete (s, i +1, Length (s));
  end;
end;
Es wird ein String in eine ValueList zerlegt, ohne daß man die Names zuvor kennen muß.


Gruß

Thomas

PS:
@Lucki: Bei benraus Lösung solltest Du darauf achten, wirklich alle Schlüsselworte (auch die nicht ausgewerteten) in dem array zu haben, ansonsten könnten einige Values Müll enthalten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 Uhr.
Seite 2 von 3     12 3      

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