Announcement

Collapse
No announcement yet.

Daten aus Textdatei in dBase oder Paradox

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

  • Daten aus Textdatei in dBase oder Paradox

    Hallo zusammen,

    ich habe eine Textdatei, die ich in dBase oder Paradox einlesen will. Ich habe zwei Tabel und ein Batchmove-Komponente. Leider legt er mir in dBase und Paradox nur eine Spalte an. Als Mode-Eigenschaft habe ich copy. Was kann ich machen, damit es geht.

    Danke euch,

    Maik

  • #2
    Hallo,

    wie sieht die Struktur der Text-Datei aus? Was passiert, wenn TTable direkt auf diese Text-Datei zugreift (TableType = <b>ttASCII</b>)? Wird ttASCII verwendet, ist die Tabelle ist eine Comma-Delimited-Textdatei mit Strings in Anführungszeichen für jedes Feld. Zeigt dann TTable den Inhalt nur in einer Spalte an, muss eine <b>Schema</b>-Datei (.SCH) erstellt werden, die die Tabellenstruktur definiert. Am schnellsten geht das, wenn von der vorhandenen Tabellenstruktur ein Datensatz in eine ASCII-Datei exportiert wird. Die BDE legt dann selbst eine SCH-Datei an (und diese kann man dann gut als Vorlage für die eigene nehmen)

    Comment


    • #3
      Hallo Andreas,<br>
      wenn ich die Textdatei in einem Grid öffne, dann zeigt er mir auch nur eine Spalte an. Der Aufbau der Datei ist so. Erst kommen die <br>Spaltenüberschriften, getrennt mit TAB. Nach der letzten Überschrift kommt ein RETURN. Die Werte haben den gleichen <br>Aufbau. Zwischen jedem Wert ein TAB und am Ende ein RETURN.
      Kann ich irgendwo die Trennzeichen festlegen?<br>
      Ich hoffe, die Informationen reichen.

      Ich danke dir schon mal für deine Hilfe,<br>

      Mai

      Comment


      • #4
        Hallo, <br>wenn du in deinem Dokument mit suchen und erstezen den Tab duch Kommas austauschst, wäre es wohl das einfachste.....

        Comment


        • #5
          Hallo,

          oftmals müssen die zu importierenden Daten sowieso geprüft/geändert werden, so das eine eigene Import-Routine, die nach frei wählbaren Trennzeichen sucht, vertretbar ist. Das folgende Beispiel demonstriert einen derartigen Einsatz, wobei alle Spalten durch ein TAB-Zeichen getrennt werden. Jeder Datensatz steht dabei in einer eigenen Zeile:
          <pre>
          procedure TKonvertForm.DoWork;
          var
          f : TextFile;
          szTmp : array[0..255] of Char;
          szEd : array[0..20] of Char;
          iRet : Integer;
          bSearch : Boolean;
          p0, p1,
          p2, p3,
          p4, p5,
          p6, p7,
          p8, p9 : PChar;
          szGENNR : array[0..11] of Char;
          szANS1,
          szANS2,
          szStr : array[0..39] of Char;
          szHNr : array[0..24] of Char;
          szPLZ : array[0..7] of Char;
          szOrt : array[0..39] of Char;
          szKaZe : array[0..14] of Char;
          szAnr : array[0..6] of Char;
          szStatus : array[0..2] of Char;

          procedure ParseLine;
          begin
          p0:= @szTmp;
          { ersten Tab suchen --> GenNr selektieren }
          p1:= StrScan(p0, #9);
          if assigned(p1) then StrLCopy(szGenNr, p0, p1 - p0)
          else Exit;
          begin
          { 1. Anschriftszeile }
          p2:= StrScan(p1 + 1, #9);
          if assigned(p2) then StrLCopy(szAns1, p1 + 1, p2 - p1 -1);
          { 2. Anschriftszeile }
          p3:= StrScan(p2 + 1, #9);
          if assigned(p3) then StrLCopy(szAns2, p2 + 1, p3 - p2 -1);
          { Strasse }
          p4:= StrScan(p3 + 1, #9);
          if assigned(p4) then StrLCopy(szStr, p3 + 1, p4 - p3 -1);
          { Hausnummer }
          p5:= StrScan(p4 + 1, #9);
          if assigned(p5) then StrLCopy(szHnr, p4 + 1, p5 - p4 -1);
          { PLZ }
          p6:= StrScan(p5 + 1, #9);
          if assigned(p6) then StrLCopy(szPLZ, p5 + 1, p6 - p5 -1);
          { Ort }
          p7:= StrScan(p6 + 1, #9);
          if assigned(p7) then StrLCopy(szOrt, p6 + 1, p7 - p6 -1);
          { KaZe und Anrede und Status }
          p8:= StrScan(p7 + 1, #9);
          if assigned(p8) then
          begin
          StrLCopy(szKaZe, p7 + 1, p8 - p7 -1);
          StrLCopy(szAnr, p8 + 1, 1)
          end;
          p9 := StrScan(p8 +1, #9);
          if assigned(p9) then StrLCopy(szStatus, p9 + 1, 1)
          end
          end;

          begin
          iLine:= 1;
          AssignFile(f, sCSV);
          Reset(f);
          while not EOF(f) do
          begin
          szTmp[0]:= #0;
          ReadLn(f, szTmp);
          ParseLine;
          iRet:= iLine mod 100;
          if iRet = 0 then
          begin
          CntLabel.Caption:= IntToStr(iLine);
          Application.ProcessMessages
          end;
          { Daten in DBF-Datei schreiben }
          with KonvertTable do
          begin
          with aGI do
          begin
          GNR:= StrToInt(StrPas(szGenNr));
          N1:= StrPas(szAns1);
          N2:= StrPas(szAns2);
          STR:= StrPas(szStr);
          HNR:= StrPas(szHNr);
          PLZ:= StrPas(szPLZ);
          ORT:= StrPas(szORT);
          KAZE:= StrPas(szKAZE);
          ANR:= StrPas(szAnr);
          STATUS := StrPas(szStatus);
          if ANR = '1' then ANR:= 'Herr'
          else if ANR = '2' then ANR:= 'Frau'
          else if ANR = '4' then
          begin
          ANR:= 'Firma';
          N1:= StrPas(szAns2);
          N2:= StrPas(szAns1)
          end
          else if ANR = '5' then
          begin
          ANR:= '';
          N1:= StrPas(szAns2);
          N2:= StrPas(szAns1)
          end
          else if ANR = '3' then ANR:= '';
          AppendRecord([GNR,N1,N2,STR,HNR, PLZ,ORT,KAZE,ANR,STATUS]);
          end
          end;
          Inc(iLine)
          end;
          CloseFile(f)
          end;
          </pre&gt

          Comment

          Working...
          X