Textdatei in 2dim-Array [erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Textdatei in 2dim-Array [erledigt]

Beitrag von peternmb »

Hallo,

ich möchte eine Textdatei in ein 2dim-Array konvertieren um diese dann weiterzuverarbeiten.
In jeder Zeile der Textdatei können zwischen 1 und 12 mit Komma getrennte Werte stehen.
Die Datei ist UTF8-kodiert (von einem Android-Gerät erzeugt).

Ich müsste die Datei praktisch zeilenweise bearbeiten, und die jeweilige Zeile nochmal zerlegen.
Ich habe versucht das Beispiel von Hubert in der Wissensbasis anzupassen komme aber nicht weiter.
Zuletzt geändert von peternmb am Sa, 14. Apr 2012 18:12, insgesamt 1-mal geändert.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Textdatei in 2dim-Array

Beitrag von UliTs »

Hallo Peternmb,

Kannst Du eine Beispieldatei als Download zur Verfuegung stellen?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2936
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Textdatei in 2dim-Array

Beitrag von Wolfgang Ciriack »

Benutzt du eXPress++ oder die ToolsIII ?
Viele Grüße
Wolfgang
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Textdatei in 2dim-Array

Beitrag von peternmb »

Wolfgang Ciriack hat geschrieben:Benutzt du eXPress++ oder die ToolsIII ?
nein, weder noch

Als Anlage eine Musterdatei.
Der Aufbau ist eigentlich immer gleich, die ersten 12 Zeilen beinhalten jeweils nur einen Wert.
Ab Zeile 13 kommen x Zeilen, in denen jeweils 11 numerische Werte, durch Kommas getrennt stehen.
Die Anzahl dieser Zeilen steht in Zeile 12 (27-48).

Vielleicht sollte ich das ganze in 2 Arrays aufteilen (die einfachen Zeilen 1-12 als seperates Array).
Irgendwie habe ich da keinen richtigen Plan.
Dateianhänge
A_Test_1.txt
UTF8
(1.21 KiB) 162-mal heruntergeladen
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2936
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Textdatei in 2dim-Array

Beitrag von Wolfgang Ciriack »

Also, wenn ich die Datei öffne, dann sehe ich da keine "Zeilen".
Ich sehe nur am Anfang ein paar Trenner ("0"), dann nur noch Werte mit Komma getrennt.
Soll es denn ein Zeilentrennzeichen geben ?
Viele Grüße
Wolfgang
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Textdatei in 2dim-Array

Beitrag von UliTs »

Wolfgang Ciriack hat geschrieben:Also, wenn ich die Datei öffne, dann sehe ich da keine "Zeilen".
Hallo Wolfgang,
wie unter Linux üblich ist das Trennzeichen 0A und nicht wie bei Windows 0D 0A :-) .
0A ist auch in der Datei enthalten.
Sicher ist es das einfachste, die gesamte Datei in eine MEMO-Variable einzulesen und anschließend mit Hilfe von At( chr(10),cMemo ) die Zeilen in ein Array zu kopieren.
Reicht das als Hilfe, Peter?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Textdatei in 2dim-Array

Beitrag von brandelh »

Genau, Linux nutzt chr(10) (0x0A) statt chr(13)+chr(10) wie in Windows üblich. *** PS: verbessert ***

Was am einfachsten ist, hängt davon ab, wo du die Schnittstelle einfacher anpassen kannst.

Ich habe bei mir in Android (Basic4Android) per definition CRLF Zeilentrenner und ANSI Zeichensatz eingestellt. => Windows keine Probleme

Wenn das nicht geht, kannst du entweder die Datei komplett einlesen und umsetzen und danach aufteilen

Code: Alles auswählen

sLinux := memoread(...)
sWinUTF8 := strTran(sLinux, chr(10), chr(13)+chr(10))
sAnsi := Utf8ToAnsi() 
Dann Aufteilen ... 
Pablos OT4XB hat einige nützliche Stringfunktionen (UTF8 nach ANSI und Tokenizer) hier in der Wissensbasis gibt es auch einige.
http://www.xbaseforum.de/viewtopic.php?f=16&t=4268
hat z.B. auch einen tokenizer, die TxtFile2Array(cDateiName,cConvert) Funktion kann man leicht anpassen wenn man CRLF durch chr(10) ersetzt (Namen ändern !)
#define CRLF chr(13)+chr(10)
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Textdatei in 2dim-Array

Beitrag von UliTs »

brandelh hat geschrieben:Genau, Linux nutzt chr(13) statt chr(13)+chr(10) wie in Windows üblich.
chr(10) und nicht chr(13) ;-)
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Textdatei in 2dim-Array

Beitrag von brandelh »

Stimmt, 0x0A => chr(10) ... später habe ich es wohl noch bemerkt ... ich verbessere es mal gleich oben damit es niemanden verwirrt.
Gruß
Hubert
Klaus Stebner
UDF-Programmierer
UDF-Programmierer
Beiträge: 66
Registriert: Fr, 29. Feb 2008 20:53
Wohnort: Furtwangen

Re: Textdatei in 2dim-Array

Beitrag von Klaus Stebner »

Hallo Peternmb,

hab es mal mit Deiner Testdatei probiert,

Code: Alles auswählen

Function Main()
// konvertiere String in Textdatei mit Zeilenschaltung
Local cString

// Lese Datei in Variable
cString := MemoRead("A_Test_1.txt") 

// ersetze LF durch CRLF (Zeilenschaltung)
cString := STRTRAN( cString, chr(10), chr(13)+ chr(10))        

//neue Textdatei mit Zeilenschaltung
MemoWrit( "A_Test_Zeile.TXT", cString)


RETURN nil

Code: Alles auswählen

Ergebnis:

...
und noch einer
48
9,0,1,0,0,0,0,0,0,18,2
12,1,0,0,0,0,0,0,0,24,3
23,0,0,0,0,0,0,0,0,23,1
9,1,0,0,0,0,0,0,0,-36,1
......
ohne weitere Konvertierung.

Hubert war schneller !!!!
Gruß Klaus
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Textdatei in 2dim-Array

Beitrag von peternmb »

vielen Dank, durch die Tipps und die Beispiele habe ich es jetzt recht einfach hinbekommen.
Es wird alles zeilenweise in ein array eingelesen, und das kann ich dann weiterverarbeiten.

Code: Alles auswählen

function t2a(cFile)
//
local array:={}
local CRLF:=chr(10)
//
cfread := MEMOREAD(cFile)  // Datei Einlesen
DO WHILE !EMPTY(cfread)
  ncrlf := AT(CRLF,cfread)
  IF ncrlf > 0
    txt := LEFT(cfread,ncrlf-1)
    cfread := SUBSTR(cfread,ncrlf+1)
  ELSE
    txt := cfread
    cfread := ""
  ENDIF
  //
  aadd(array,txt)
  //
ENDDO
//
return array
Antworten