Announcement

Collapse
No announcement yet.

Aus Text-Datei(*.txt) Zahlenkolonne in DBGrid

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

  • Aus Text-Datei(*.txt) Zahlenkolonne in DBGrid

    Hallo,<BR>
    ist es möglich, aus einer Textdatei, die<BR>
    nur eine Zahlenkolonne, die untereinander <BR>
    gelistet ist und 3 bis 4 stellig ist,<BR>
    in eine Tabelle, bzw. DBGrid-Komponente zu<BR>
    übertragen?<BR>
    DBGrid ist vorgegeben und besitzt <BR>
    3 Spalten, aber nur in die erste Spalte <BR>
    (links)sollen die Nummern kopiert werden,<BR> dazu sind die Spalten als Vorgabe durch ein<BR>
    Semikolon getrennt.<BR>
    Also zum Beispiel:<BR>
    2000;000;1020;<BR>
    2113;1200;3000;<BR>
    7000;3223;100;<BR>
    usw.<BR>
    In der Textdatei haben die Zahlen aber kein<BR>
    Semikolon!<BR>
    Wie würde die Anweisung ausschauen?<BR>
    Vielen Dank im Voraus<BR>
    Hans-Jürgen <BR>

  • #2
    Hallo,<br>bediene dich einer TStringlist, lade die Textdatei. Über eine Schleife der Stringlist kannst du die Werte in die Tabelle schreiben. Evtl muss vorher geprüft werden, ob die Werte schon in der Tabelle enthalten sind.

    <PRE>
    var
    liste : TStringlist;
    x : integer;
    begin
    liste := TStringlist.create;
    liste.loadfromfile('Textfile.txt');
    for x := 0 to liste.count - 1 do begin
    // Ab hier Tabellenoperationen...
    { tabelle.insertrecord([liste[x],
    NIL
    {Anzahl der Felder mit NIL}
    ]);
    }
    end;
    liste.free;
    end;
    </PRE>
    so ungefähr :-)<br><br>Michae

    Comment


    • #3
      Hallo Michael,<BR>
      danke für Deine Hilfe, komme aber nicht klar<BR>
      mit der Nil-Anweisung.<BR>
      Mal sehen wie ich weiter komme!<BR>
      Gruß Hans-Jürgen<BR&gt

      Comment


      • #4
        Hallo<br>Du musst bei Insertrecord die Anzahl der Felder deines Record übergeben. evtl habe ich Dein Ansinnen auch nicht richtig verstanden. Gib doch mal ein Beispiel Deiner Textdatei. <br>Michae

        Comment


        • #5
          Hallo Michael, <BR>
          Die Textdatei ist ganz einfach,<BR>
          es ist eine unbestimmte Anzahl von einer<BR>
          Zahlenreihe und die sieht als Beispiel<BR>
          so aus:<BR>
          100<BR>
          2000<BR>
          230<BR>
          3000<BR>
          100<BR>
          <BR>
          usw.<BR>
          <BR>
          Die Datenbank besitzt als Eingabe<BR>
          drei DBEDIT - Felder, in denen<BR>
          Zahlenwerte eingegeben werden<BR>
          z.B.<BR>
          in DBEdit1 100<BR>
          in DBEdit2 0<BR>
          in DBEdit3 0<BR>
          in der DBGrid erscheinen sie dann<BR>
          über die Anweisung:<BR>
          Table1('zusammen') := table1('XKo')+ <BR>
          ';' + Table1('YKo')+ ';';<BR>
          z.B.<BR>
          100;0;0;<BR>
          2000;0;0; <BR>
          230;0;0;<BR>
          3000;10;0;<BR>
          Das klappt manuell eingegeben wunderbar<BR>
          Nun will ich aber aus einer *.TXT Datei<BR>
          eine Einspaltige Zahlenkolonne einfügen,<BR>
          d.h. in das DBEdit1 und nur dort hinein <BR>
          und das ist mein Problem!<BR>
          Gruß Hans-Jürgen<BR&gt

          Comment


          • #6
            Hallo Hans-Jürgen,<br>alle Klarheiten beseitigt :-)<br>Das obige Beispiel geht. Nur kenne ich immer noch nicht die Felder deiner Tabelle (Struktur). ich nehme mal folgendes an:
            <br>1.Feld lfdnr - autoincrement
            <br>2.Feld A - integer
            <br>3.Feld B - integer
            <br>4.Feld C - integer<br>
            dann müsstest Du in obigem Beispiel die ...insertrecordzeile folgendermassen schreiben:<br><PRE>
            tabelle.insertrecord([NIL, // lfdnr
            strtoint(trim(liste[x])), // Feld A
            0, // Feld B
            0 // Feld C
            ]);
            </PRE>Siehe auch "appendrecord"... (Delphi Hilfe)
            cu Michae

            Comment


            • #7
              Hallo Michael! <BR>
              Danke für die Mühe<BR>
              <BR>
              Die Tabellen-Struktur sieht folgend aus:<BR>
              1. Nr + *<BR>
              2. XKo A 40<BR>
              3. YKo A 40<BR>
              4. ZKo A 40<BR>
              5. Notiz M 20<BR>
              <BR>
              Meinst du diese Struktur?<BR>
              <BR>
              Gruß Hans-Jürgen<BR&gt

              Comment


              • #8
                Hallo Hans-Jürgen,<br>GENAU :-)<br>
                dann sieht es folgendermassen aus:<PRE>
                tabelle.insertrecord([NIL, // lfdnr
                trim(liste[x]),//Xko
                '', // YKo
                '', //ZKo
                ''
                ]);
                </PRE> so, jetzt sollte es gehen ;-)<br>cu Michae

                Comment


                • #9
                  Hallo Michael;<BR>
                  Ist mir schon fast Peinlich,<BR>
                  aber es funktioniert nicht.<BR>
                  Hier die Procedure:<BR>
                  <PRE>
                  Procedure InsertRecord(const Values: array of const);
                  Var Liste : TStringlist;
                  x : Integer;
                  begin
                  Liste := TStringlist.Create;
                  Liste.LoadFromFile('Dummy.txt');
                  for x := 0 to Liste.Count -1 do begin
                  DatSatz01.InsertRecord([NIL,
                  trim(Liste[x]),
                  '',
                  '',
                  ''
                  ]);
                  end;
                  Liste.Free;
                  end;
                  </PRE>
                  Es wir auch kein Fehler gemeldet!!<BR>
                  Kann es sein, die Eingabe der Daten<BR>
                  kann erst erfolgen, wenn über eine CheckBox<BR>
                  der Einfügemodus erfolgt? Vorher ist schon<BR>
                  alles "gelaufen"?!<BR>
                  Gruß Hans-Jürgen<BR&gt

                  Comment


                  • #10
                    Hallo Hans-Jürgen,<br>Braucht dir nicht peinlich sein!<br><PRE>"Kann es sein, die Eingabe der Daten
                    kann erst erfolgen, wenn über eine CheckBox
                    der Einfügemodus erfolgt?"</PRE>Nein, da würde eine Fehlermeldung erscheinen. Ich kann mir im Moment auch keinen Reim drauf machen, warum es ohne Exception durchläuft und keine Daten in der Tabelle sind?!?!?!? Ersetze doch mal "insertrecord" durch "appendrecord".<br>Michae

                    Comment


                    • #11
                      Hallo Michael;<BR>
                      vielen Dank für deine Mühe!<BR>
                      Es "läuft"! Und zwar mit Appendrecord<BR>
                      Gruß Hans-Jürgen<BR&gt

                      Comment


                      • #12
                        Hallo Hans-Jürgen<br>Dann war deine Tabelle leer :-)<br>cu Michae

                        Comment


                        • #13
                          Hallo Michael,<BR>
                          nein, die Tabelle war nicht leer!<BR>
                          Ich habe es probiert,an bereits eingegebenen <BR>
                          Datensatz ( mit drei Eingaben) habe ich fünf<BR>
                          neue eingefügt.<BR>
                          Ich weiß, AppendRecord soll einen neuen<BR>
                          Record an die Tabelle fügen, laut eines<BR>
                          Lehrbuches, und InsertRecord einen neuen<BR>
                          Datensatz an der aktuellen Satzzeigerposition<BR>
                          einfügen.<BR>
                          Die ganze "Sache" ist mir nicht völlig klar!<BR>
                          Aber es funktioniert bestens, Dank deinem<BR>
                          Interesse!<BR>
                          Gruß Hans-Jürgen<BR&gt

                          Comment

                          Working...
                          X