AGB  ·  Datenschutz  ·  Impressum  







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

Stringlist

Ein Thema von manfred_h · begonnen am 5. Feb 2008 · letzter Beitrag vom 8. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#1

Stringlist

  Alt 5. Feb 2008, 19:45
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:
        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;
Shalom
Manfred


[edit=Matze]Tippfehler im Titel korrigiert. MfG, Matze[/edit]
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Strinlist

  Alt 5. Feb 2008, 19:48
Hallo,

mit sl.count findest Du heraus wieviele Zeilen die StringList hat.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Strinlist

  Alt 5. Feb 2008, 19:49
Hallo,

die Anzahl der Strings erhälst du mit

sl.Count; An deiner Stelle würde ich dies mit einer Schleife lösen, in der du die einzelnen Zeilen/Strings verarbeiten kannst:

Delphi-Quellcode:
for i := 0 to sl.Count - 1 do
begin
  // ...
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Strinlist

  Alt 5. Feb 2008, 20:04
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
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#5

Re: Strinlist

  Alt 5. Feb 2008, 20:16
Hallo zusammmen
Hallo Marabu

Zitat:
Wie groß ist denn der Wertevorrat für die Codes?
Es können Maximal 12 Werte zugeordnet werden.

Zitat:
Tauchen diese Werte als Schlüssel in einer anderen Tabelle auf?
Nein ( Danke für den Tipp )

Zitat:
Wieviele Datensätze hat die gezeigte Tabelle?
Ca. 300

habe nun ein wenig rumgeteset:

Delphi-Quellcode:
        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;
( i kann ich hier nicht als variable nehmen da diese schon verwendet wird. )

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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Strinlist

  Alt 5. Feb 2008, 20:31
Zitat von manfred_h:
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
So:

Delphi-Quellcode:
for anz := 0 to sl.Count -1 do
begin
   FieldByName('ART_' + IntToStr(i)).AsString := sl[i];
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Strinlist

  Alt 5. Feb 2008, 21:23
Bei nur zwölf möglichen Werten ist es vorteilhafter jedem Wert ein Feld zu spendieren - das vereinfacht Auswertungen kollosal.

Delphi-Quellcode:
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;
Gute Nacht
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#8

Re: Strinlist

  Alt 6. Feb 2008, 10:29
Das einfüfen klappt nun 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

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Strinlist

  Alt 6. Feb 2008, 10:47
Hallo,

dann musst du eine Übersetzung vorsehen:

Delphi-Quellcode:
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;
Aber warum willst du das Feld ART_12 nennen und nicht ART_EZ?

Freundliche Grüße
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#10

Re: Strinlist

  Alt 6. Feb 2008, 10:58
Danke für Deinen Tipp. Werde das gleich versuchen.

Zitat von marabu:
Aber warum willst du das Feld ART_12 nennen und nicht ART_EZ?
Es kann auch ein anderer Wert als EZ im Feld sein.

Danke schon mal
Manfred
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:04 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