![]() |
Stringlist
Hallo zusammen
habe da ein kleines Probelm. Folgende Zeile aus einer DB muss ich aufteilen um sie danach zerteilt in einer anderen Tabelle zu speichern. > AK SH 36 VA DV EZ Es können bis zu 12 Werte sein die mit einem Leerzeichen voneinander getrennt sind. Kann aber auch vorkommen das nur ein Wert drin ist. mit folgendem Code kann ich die Zeile zwar einlesen wenn alles ausgefüllt ist aber erhalte Fehlermeldungen wenn Werte fehlen. Wie kann ich überprüfen wieviele Werte im String vorhanden sind?
Delphi-Quellcode:
Shalom
begin
input := udm.t_SVADR.FieldByName('ART').AsString; sl := TStringList.Create; // StringList erstellen sl.Delimiter := ' '; // Trennzeichen einstellen sl.DelimitedText := input; try FieldByName('ART_1').AsString := (sl[0]); FieldByName('ART_2').AsString := (sl[1]); FieldByName('ART_3').AsString := (sl[2]); FieldByName('ART_4').AsString := (sl[3]); FieldByName('ART_5').AsString := (sl[4]); FieldByName('ART_6').AsString := (sl[5]); FieldByName('ART_7').AsString := (sl[6]); FieldByName('ART_8').AsString := (sl[7]); FieldByName('ART_9').AsString := (sl[8]); FieldByName('ART_10').AsString := (sl[9]); FieldByName('ART_11').AsString := (sl[10]); FieldByName('ART_12').AsString := (sl[11]); finally sl.Free; // Speicher freigeben end; Manfred [edit=Matze]Tippfehler im Titel korrigiert. MfG, Matze[/edit] |
Re: Strinlist
Hallo,
mit sl.count findest Du heraus wieviele Zeilen die StringList hat. Grüße Klaus |
Re: Strinlist
Hallo,
die Anzahl der Strings erhälst du mit
Delphi-Quellcode:
An deiner Stelle würde ich dies mit einer Schleife lösen, in der du die einzelnen Zeilen/Strings verarbeiten kannst:
sl.Count;
Delphi-Quellcode:
for i := 0 to sl.Count - 1 do
begin // ... end; |
Re: Strinlist
Hallo Manfred,
eventuell ist es besser, wenn du die Werte nicht vereinzelst - deine Tabelle verliert durch die Wiederholungs-Feldgruppe ART_nn ihre Normalform. Wie groß ist denn der Wertevorrat für die Codes? Gibt es da insgesamt nur 12 Werte oder können maximal 12 zugeordnet werden? Tauchen diese Werte als Schlüssel in einer anderen Tabelle auf? Wieviele Datensätze hat die gezeigte Tabelle? Freundliche Grüße |
Re: Strinlist
Hallo zusammmen
Hallo Marabu Zitat:
Zitat:
Zitat:
habe nun ein wenig rumgeteset:
Delphi-Quellcode:
( i kann ich hier nicht als variable nehmen da diese schon verwendet wird. )
begin
input := udm.t_SVADR.FieldByName('ART').AsString; sl := TStringList.Create; // StringList erstellen sl.Delimiter := ' '; // Trennzeichen einstellen sl.DelimitedText := input; for anz := 0 to sl.Count -1 do try FieldByName('ART_0').AsString := (sl[anz]); FieldByName('ART_1').AsString := (sl[anz]); FieldByName('ART_2').AsString := (sl[anz]); FieldByName('ART_3').AsString := (sl[anz]); FieldByName('ART_4').AsString := (sl[anz]); FieldByName('ART_5').AsString := (sl[anz]); FieldByName('ART_6').AsString := (sl[anz]); FieldByName('ART_7').AsString := (sl[anz]); FieldByName('ART_8').AsString := (sl[anz]); FieldByName('ART_9').AsString := (sl[anz]); FieldByName('ART_10').AsString := (sl[anz]); FieldByName('ART_11').AsString := (sl[anz]); finally end; Im Moment wird überall jeweils der erste Wert den er aus dem string list verwendet. Das Problem sehe ich > (sl[anz]) ist ja überall gleich. Aber wie kann ich das ändern? Danke für Eure Hilfe |
Re: Strinlist
Zitat:
Delphi-Quellcode:
for anz := 0 to sl.Count -1 do
begin FieldByName('ART_' + IntToStr(i)).AsString := sl[i]; end; |
Re: Strinlist
Bei nur zwölf möglichen Werten ist es vorteilhafter jedem Wert ein Feld zu spendieren - das vereinfacht Auswertungen kollosal.
Delphi-Quellcode:
Gute Nacht
with TStringList.Create do
try CommaText := udm.t_SVADR.FieldByName('ART').AsString; for i := 0 to Pred(Count) do FieldByName('ART_' + Strings[i).AsBoolean := True; finally Free; end; |
Re: Strinlist
Das einfüfen klappt nun :wink: Dank Eurer Hilfe.
Einzig ein Problem besteht noch: z.T sind im String nicht alle "Felder" belegt z.B. PA BS 10 VA EZ EZ Hierbei wird der letzte EZ Wert direkt in das 6te Feld eingetragen anstatt in das 12te. Zwischen den EZ Werten sind Leerschläge. PA BS 10 VA EZ...................EZ :gruebel: |
Re: Strinlist
Hallo,
dann musst du eine Übersetzung vorsehen:
Delphi-Quellcode:
Aber warum willst du das Feld ART_12 nennen und nicht ART_EZ?
with TStringList.Create do
try CommaText := udm.t_SVADR.FieldByName('ART').AsString; for i := 0 to Pred(Count) do FieldByName('ART_' + IntToStr(Succ(AnsiIndexText(Strings[i], [ 'AK', 'SH', '36', 'VA', 'DV', 'EZ' { ... } ])))).AsBoolean := True; finally Free; end; Freundliche Grüße |
Re: Strinlist
Danke für Deinen Tipp. Werde das gleich versuchen. :thumb:
Zitat:
Danke schon mal Manfred |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 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