AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Txt datei in Paradox einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

Txt datei in Paradox einlesen

Ein Thema von Bedrock · begonnen am 31. Mai 2003 · letzter Beitrag vom 3. Jun 2003
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#11
  Alt 2. Jun 2003, 09:49
Hallo Bedrock,

ZerlegeZeile war tatsächlich gemeint als eine von dir noch zu schreibende Funktion, die 2 Parameter übernimmt und einen String zurückgibt:

1. Eine Zeichenkette (string)
2. Eine Ziffer i, die angibt, welches Feld du benötigst

Also nehmen wir einmal die Zeile:

T 100 5 110 0 M1 Automatenfall 0 1 0 0 0

Wenn du wie oben beschrieben die Zeilen der Textdatei in die Variable "zeile" einliest, und die Prozedur "ZerlegeZeile geschrieben hast, sollte der Aufruf von ZerlegeZeile(zeile, 1) die Zeichenkette "T" zurückliefern, ZerlegeZeile(zeile, 2) liefert "100" u.s.w.

Zur Frage, wie diese Funktion denn aussehen könnte, gibt es ein Problem, das dadurch entsteht, dass du das Leerzeichen als Trennung zwischen den Feldern benutzt (darauf hat ja auch r_kerber schon hingewiesen). Da du ja auch den SMS Text speicherst, dieser aber auch Leerzeichen enthält, ist eine eindeutige Zerlegung sehr schwierig. Ich habe deshalb ja auch in dem anderen Thread, in dem du die Textdatei erstellt hast ein Code Stück gezeigt, dass jedes Feld mit einem Semikolon abgeschlossen hat. Dann hättest du jetzt einfach die Semikolons zählen können und so das Feld ermitteln.

Wenn es dir aber nur um die Gruppenfelder geht, gibt es hier noch einen Ausweg, der aber nicht die Ideallösung (Verwendung eines sinnvollen Trennungszeichens) darstellt. Da ja die letzten 5 Felder immer nur eine 0 oder eine 1 enthalten können, funktioniert folgendes:

Delphi-Quellcode:
lang := Length(zeile);
grp1 := zeile[lang-8];
grp2 := zeile[lang-6];
grp3 := zeile[lang-4];
grp4 := zeile[lang-2];
grp5 := zeile[lang];
D.h. zeile mit Readln einlesen, Gruppen mit dem obigen Code auswerten.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#12
  Alt 2. Jun 2003, 09:58
das würde aber folgendes bedeuten:

grp1 = 0 1 0 0 0
grp2 = 1 0 0 0
grp3 = 0 0 0
grp4 = 0 0
grp5 = 0

grp1-5 müßten somit IMHO mit String[1] deklariert werden.

Ansosnsten sollte aber auch folgendes funktionieren;

Delphi-Quellcode:
grp1 = Copy (zeile, lang-8, 1);
grp2 = Copy (zeile, lang-6, 1);
grp3 = Copy (zeile, lang-4, 1);
grp4 = Copy (zeile, lang-2, 1);
grp5 = Copy (zeile, lang, 1);
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#13
  Alt 2. Jun 2003, 10:02
Hallo r_kerber,

dein Code ist der bessere, weil man immer Copy benutzen sollte. Mein Code funktioniert jedoch auch, weil ich auf die interne Struktur eines "normalen Strings" zugreife. zeile[lang-8] liefert tatsächlich einen einzelnen Char und zwar den neuntletzten .
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#14
  Alt 2. Jun 2003, 10:04
Jetzt wo Du das sagst...
  Mit Zitat antworten Zitat
Bedrock

Registriert seit: 11. Apr 2003
20 Beiträge
 
#15
  Alt 2. Jun 2003, 10:11

Danke schon mal für die Hilfe.

Also die Zeilen der Text datei sind durch Tabulator getrennt und nicht durch Leerezeichen.

Also müsste es doch einen Weg geben um die Zeilen mit dem Tabulator zu trennen. Oder nicht??
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#16
  Alt 2. Jun 2003, 10:18
Hallo Bedrock,

ja, in diesem Fall gibt es tatsächlich eine bessere Lösung. Da kommt wieder die Funktion ZerlegeZeile zum Einsatz. Ein Tabulator ist das 9-te ASCII Zeichen als Chr(9). Du kannst also die zeile "scannen" und nach CHR(9) suchen.Das erste Feld startet mit dem Index 1, dass 2-te Feld mit dem auf das erste Chr(9) folgende Zeichen usw.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Bedrock

Registriert seit: 11. Apr 2003
20 Beiträge
 
#17
  Alt 2. Jun 2003, 10:23
Das sind ja schon mal gute Nachrichten.

Aber das mit der Procedur Zeilen zerlegen versteh ich leider immer noch nicht ganz.

Kanst du mir vielleicht mal ein Bsp. posten??
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#18
  Alt 2. Jun 2003, 10:36
Das kam gerade in einem anderen Thread. Split-Funktion Sollte auch für Dich geeignet sein.
  Mit Zitat antworten Zitat
Bedrock

Registriert seit: 11. Apr 2003
20 Beiträge
 
#19
  Alt 2. Jun 2003, 18:13

kriegs einfach nicht hin. HELP.

Kann ich nicht mit der Batchmove funktion denn Tabulator splitten?
Bekomm immer nur eine Saplte.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#20
  Alt 2. Jun 2003, 22:58
Hallo Bedrock,

hast du es mal mit folgendem Code probiert:

Delphi-Quellcode:
var
  I: Integer;
  Strings: TStringArray;
begin
  { zeile einlesen }
  Strings := Split(zeile, Chr(9));
  if Length(Strings) > 0 then
    for I := Low(Strings) to High(Strings) do
      ShowMessage(Strings[I]);
end;
Mit diesem Code und der Funktion, die dir r_kerber gezeigt hat, solltest du doch die Zeile "Feld für Feld" angezeigt bekommen.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 10:30 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