Announcement

Collapse
No announcement yet.

Stringlist (Daten aus Textdatei importieren)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Stringlist (Daten aus Textdatei importieren)

    Hallo,

    ich habe bisher einzulesende Dateien immer Zeilenweise eingelesen. Nun spiele ich ein wenig mit einer TSTringList herum und komme nicht weiter. Die Datei hat als Feldtrenner ein ";" und besteht aus mehreren Zeilen ohne Kopfzeile.

    Ich lade eine Datei in mein StringlistenObjekt (aSL) mit :

    asl.loadfromfile ( C:\ bla bla.csv)

    Nun möchte ich zeilenweise die einzelnen Felder auslesen und verarbeiten. Ich bekomme es nicht hin, zu Testzwecken, auch nur die Erste Zeile in einer SHOWMESSAGE darzustellen und kann daher auch nicht auf die einzelnen Felder der jeweiligen Zeilen zugreifen.

    ein Count( aSL.Count) gibt mir die korrekte Zeilenzahl wieder, gehe ich daher und beginne:

    for I := 0 to max do
    begin
    asl[i].Text ....

    bekomme ich schon Probleme.

    Noch eine Frage dazu. Muss ich (und wie) bei "LoadFromFile" auch den TextDelimter angeben?

    Lese ich jede einzelne Zeile in die Stringlist ein, funktioniert es wunderbar....

    Gruß
    Heiko

  • #2
    bekomme ich schon Probleme.
    Aha, welche?

    Noch eine Frage dazu. Muss ich (und wie) bei "LoadFromFile" auch den TextDelimter angeben?
    Nein, geht nicht

    TStringList kennt keine frei wählbaren Feldtrenner. Hier ist immer der Zeilenumbruch maßgebend.

    Die Eigenschaft Delimiter gilt nur für die Ausgabe als Delimitet Text.
    Christian

    Comment


    • #3
      Nunja....
      asl[i].Text
      Lies in der Hilfe nach, was TEXT ist und ergibt und warum das so nicht geht und was stattdessen hin muss
      Christian

      Comment


      • #4
        Originally posted by Christian Marquardt View Post
        Aha, welche?



        Nein, geht nicht

        TStringList kennt keine frei wählbaren Feldtrenner. Hier ist immer der Zeilenumbruch maßgebend.

        Die Eigenschaft Delimiter gilt nur für die Ausgabe als Delimitet Text.
        Aha, ist dann mein Weg, die Datei in eine Stringlist einzulesen überhaupt ein Epfehlenswerter?

        Ich dachte ich kann die Datei komplett einladen und dann die Zeilen sequentiell durchlaufen und über einen Index auf die Feldinhalte zugreifen...

        Der Hinweis der hinter dem Tipp mit dem XY[i].Text steht erschließt sich mir auch nicht....

        Comment


        • #5
          Ich dachte ich kann die Datei komplett einladen und dann die Zeilen sequentiell durchlaufen und über einen Index auf die Feldinhalte zugreifen...
          Genau dafür ist TStringList da

          Der Hinweis der hinter dem Tipp mit dem XY[i].Text steht erschließt sich mir auch nicht....
          Da du offenbar keine Hilfe besitzt zum deinem Delphi:

          Die Eigenschaft Text ergibt ALLE Zeilen in EINEM String. Somit ist dein obiger Code falsch.

          Richtig wäre
          asl.Strings[i]
          Zuletzt editiert von Christian Marquardt; 09.06.2008, 06:54.
          Christian

          Comment


          • #6
            Oh doch, ich habe eine Hilfe. Nur leider habe ich den richtigen Eintrag nicht finden können. Das ich mit dem ersten Konstrukt den Inhalt der gesamten STringList bekomme habe ich auch gemerkt.

            Danke für deinen Tipp!

            asl.Strings[i] bringt mir den entsprechenden Inhalt eines Feldes einer Zeile, auch das kenne ich. Was mir einfach fehlt ist die Möglichkeit bei Zeile 0 zu beginnen, die Zeile auszuwerten und auf die nächste zu springen.

            ...
            for I := 0 to asl.Count- 1 do
            begin
            asl.Delimiter := ';';
            asl.DelimitedText := asl.Strings[i];
            ...



            hier bringt mir asl.String[i] den Inhalt des jeweiligen Feldes, nicht jedoch die ganze Zeile die ich dann gerne feldweise auswerten möchte.


            Heiko
            Zuletzt editiert von PM Heiko; 09.06.2008, 10:35.

            Comment


            • #7
              asl.Delimiter := ';';
              asl.DelimitedText := asl.Strings[i];
              Die Eigenschaft Delimiter gilt nur für die Ausgabe als Delimitet Text.
              Das geht nicht....

              Du musst jetzt also "selber tätig werden" und dir die Zeile nochmals aufsplitten. Hier eine C++Builderroutine die du ev. anpassen kannst.
              http://www.marquardtnet.info/cecke/q...quicky_01.html

              In diesem Fall würdest du nun eine weitere TStringList anlegen, die dann die aufgesplitteten Elemente enthält.
              Christian

              Comment

              Working...
              X