Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Delphi Tabelle als txt speichern (https://www.delphipraxis.net/5253-delphi-tabelle-als-txt-speichern.html)

Bedrock 29. Mai 2003 19:31


Delphi Tabelle als txt speichern
 
Hallo

Delphi Tabelle als txt speichern.
Weis jemand wie ich eine Delphi Paradox Tabelle als txt speichern kann.

:?:

Hansa 29. Mai 2003 19:56

dazu schreibst Du einfach alle Felder der Tabelle Feld für Feld in eine Zeile der Textdatei.

MrSpock 29. Mai 2003 21:42

Hallo Bedrock,

als zusätzlichen Hinweis zu der Antort von Hansa:

Wenn du den Fields-Array benutzt, kannst du den Inhalt aller Felder eines Datensatzes in einer Schleife speichern:

Delphi-Quellcode:
myTable.First;
while not myTable.EOF do
begin
  for i:=0 to myTable.FieldCount-1 do
    zeile := myTable.Fields[i].AsString+';';
  Writeln(myFile, zeile);
end;
Außerdem gibt es die Methode GetCurrentRecord, die einen kompletten Datensatz in eiunem Puffer zurückliefert.

Dann kannst du dir noch BatchMove anschauen, damit kannst du ebenfalls den Inhalt einer Paradoxdatei in eine Textdatei schieben.

Bedrock 30. Mai 2003 12:30

Hallo

Danke schon mal für die rasche Antwort.
Aber wie schreib ich die Tabelle Zeile für Zeile in ein Textfile??

r_kerber 30. Mai 2003 12:37

In etwa so:
Delphi-Quellcode:
Tabelle.First;
Repeat
  WriteLn (Datei, TabelleFeld1.AsString, TabelleFeld2.AsString, ...);
  Tabelle.Next;
Until Tabelle.Eof;

MrSpock 30. Mai 2003 12:50

Hallo Bedrock,

Zitat:

Aber wie schreib ich die Tabelle Zeile für Zeile in ein Textfile??
Äääh... Die Frage hab ich doch oben beantwortet. Der Code schreibt Zeile für Zeile in eine Textdatei und schließt jedes Feld mit einem ";" ab. Was verstehst du an dem Code-Schnipsel nicht?

r_kerber 30. Mai 2003 12:52

Zitat:

Zitat von MrSpock
Äääh... Die Frage hab ich doch oben beantwortet.

Ich muß doch blind gewesen sein, dass ich das auch noch mal geschrieben habe. :oops:

Bedrock 30. Mai 2003 12:56

oh man
ich glaub ich bin zu blöd.
Also bei mir sieht das ganze jetzt so aus:
Delphi-Quellcode:
procedure TForm1.CreateBtnClick(Sender: TObject);
begin
 Table1.First;
Repeat
  WriteLn ('d:\SMS Alarmierung\SAT_Datenbank.dbf', table1.text.AsString, tabele1Alarm.AsString, ...);
  Table1.Next;
Until Table1.Eof;;

end;
Hab nun das Problem mit der tabllenfeld eingabe??
Meine Spalten lauten: Text und Alarm.

Weiters wie bekomm ich das dann in eine Memo oder so??

MrSpock 30. Mai 2003 12:56

Hallo r_kerber,

naja, dein Code ist ja eine Alternative, weil er den Fields Record nicht benutzt. Und es ist immer gut Alternativen zu verstehen. :roll:

r_kerber 30. Mai 2003 13:02

Warum schreibst Du es nicht gleich in ein Memo mit
Delphi-Quellcode:
Memo.Lines.Add (Feld1.AsString + Feld2.AsString);
Ansonsten gibt es für TMemo.Lines die Funktionen LoadFromFile und SaveToFile.

Bedrock 30. Mai 2003 13:06

Das mit loadfromfile und savetofile ist mir klar.

Aber wie geb ich das korrekte Fel1, Feld2 .. an?

Ich meine irrgentwo muss ich ja sagen aus welcher tabelle er das nehmen soll.
Oder nicht?

Hansa 30. Mai 2003 13:56

na gut, noch ein Beitrag von mir zu diesem "Blindenthread". 8) :lol:
Ihr habt nämlich das assign vergessen, bitte in Hilfe nachlesen:

Code:
procedure TForm1.CreateBtnClick(Sender: TObject);
var d : text;
begin
Table1.First;
AssignFile (d,'d:\SMS Alarmierung\SAT_Datenbank.dbf');
rewrite (d);
Repeat
  WriteLn (d, table1.text.AsString, tabele1Alarm.AsString, ...);
  Table1.Next;
Until Table1.Eof;;
close (d);
so sollte es gehen. Der Variablen d wird mit Assign ein physikalischer Platte-Dateiname zugeordnet.

Bedrock 30. Mai 2003 14:11

Danke schon mal
aber

bei var d : text;
[Fehler] SAT_Datenbank.pas(55): Konstante oder Typenbezeichner erwartet

??

Hansa 30. Mai 2003 14:25

textfile

Bedrock 30. Mai 2003 14:46

Alles klar.

Kann mir aber jemnd noch vollgende Zeile erkären?

WriteLn (Datei, TabelleFeld1.AsString, TabelleFeld2.AsString, ...);

r_kerber 30. Mai 2003 15:43

Zitat:

Zitat von Bedrock
Kann mir aber jemnd noch vollgende Zeile erkären?

Datei ... ist das mit Assign zugeweisene Taxtfile @Hansa: Das assign habe ich nicht vergessen. Das habe ich genauso als bekannt vorausgesetzt wie das Table.Open!
TabelleFeld1 ... Das sind Bezeichner für die einzelnen Tabellenspalten und enthalten jeweils den Wert des aktuellen Datensatzes! Wenn Du auf ein TTable doppelt klickst, dann öffnet sich der Felder-Editor. Anschließend rechte Maustaste und alle Felder hinzfügen und schon hats Du die entsprechenden Variablen.
AsString ... Liefert als Ergebnis den aktuellen Wert des Feldes als Zeichenkette.
WriteLn ... schreibt die Zeile irgenwohin (hier in eine Datei) mit abschließendem Zeilenumburch!

Bedrock 30. Mai 2003 15:54

OK habs gescheckt. Mercy

Habe vollgende Lösung
Delphi-Quellcode:
procedure TForm1.CreateBtnClick(Sender: TObject);

begin
Screen.Cursor:= crHourGlass;
Table1.First;
memo.Clear;
CreateBtn.Enabled:= false;
repeat
Memo.Lines.Add (table1.Fields[0].AsString + table1.Fields[1].AsString + table1.Fields[2].AsString + table1.Fields[3].AsString + table1.Fields[4].AsString + table1.Fields[5].AsString + table1.Fields[6].AsString + table1.Fields[7].AsString + table1.Fields[8].AsString + table1.Fields[9].AsString + table1.Fields[10].AsString);
Table1.Next;
Until Table1.Eof;;
begin
Memo.Lines.SaveToFile('d:\Sms Alarmierung\SAT.txt');
Screen.Cursor:= crDefault;
CreateBtn.Enabled:= true;

    end;
end;

Kann mir noch jemand sagen wie ich die Spaltenbezeichnung einfügen kann.

Danke für die Hilfe
Gruß Bedrock

r_kerber 30. Mai 2003 16:10

Zitat:

Zitat von Bedrock
Kann mir noch jemand sagen wie ich die Spaltenbezeichnung einfügen kann.

Wo?

Bedrock 30. Mai 2003 16:47

Hat sich auch schon erledigt danke.

Hab aber noch ein anderes Anliegen.

Wie kann ich aus der Datenbank Zeilen vergleichen??

Bsp.:
eine Datenbank Zeile sieht bei mir so aus

SMS Text Alarm Gruppe1 Gruppe2 Gruppe3 Gruppe4
M1 Synpol Störung 0 1 0 0 0

Der SMS Text ist ja klar. der Text der als SMS versendet wird.

Alarm, Gruppe1, ... ist dazu da das die Meldung an verschidene Nummern versendet wird.

Das heist bei Gruppe1 = 1 Meldung wird an Grupp1 versendet
Gruppe2=1 Gruppe3=1 Meldung an Gruppe2+3

eine 0 bedeutet das die Meldung an die Gruppe nicht weitergeleitet wird.

Nun möcht ich gerne eine Kontrolle durchführen das wenn überall eine Null drinn steht. ich ein Hinweis in eine Memo bekomme.

MrSpock 1. Jun 2003 09:33

Hallo Bedrock,

in meinem Code Schnipsel, den du bisher ja vollkommen ignoriert hast :mrgreen: , sind die Datenfelder durch Semikolons getrennt, das hätte die Suche vereinfacht. Die Schleife hätte dir auch Schreibarbeit gespart.
Vielleicht noch folgender Hinweis: eine repeat - until Schleife sollte man nur benutzen, wenn die Schleife midestens einmal durchlaufen werden soll. Wenn die Tabelle leer ist, funktioniert dein Code nicht, deshalb solltest du unbedingt eine While-Schleife benutzen.

So, nun zu deiner neuen Frage:

Als erstes musst du die Stelle finden, ab der die Ziffern losgehen. Wenn ich deine Ausfführungen korrekt verstanden habe, steht vor den Gruppen immer das Wort "Alarm". Falls das stimmt, funktioniert der folgende Code (aber auch nur, wenn das Wort Alarm nicht in der SMS vorkommt [ansonsten musst du das Wort "Alarm" sooft suchen, bis du das letzte Vorkommen gefunden hast, da du das Leerzeichen als Trennungszeichen benutzt hast])

Delphi-Quellcode:
  { In Zeile steht die zuletzt gelesene Zeile }
  posi := Pos('Alarm', zeile);
  { Jetzt kannst du über Copy(zeile, posi+6, 1) z.B. auf die erste Ziffer zugreifen }
  try
    grp1 := StrToInt(Copy(zeile, posi+6, 1));
    grp2 := StrToInt(Copy(zeile, posi+8, 1));
    ...
  except
    on exception do
      { Fehlermeldung ausgeben }
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 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