Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Glombi am 01.07.04 - 15:46:12

Titel: DTA Dateien per Script lesen / schreiben
Beitrag von: Glombi am 01.07.04 - 15:46:12
Hat jemand zufällig Erfahrungen mit dta Dateien? Das ist ein standardisiertes Format, welches für die elektronische Bearbeitung von Überweisungen verwendet wird.
Es handelt sich um eine Datei, bei der die Datensätze nicht mit CR/LF getrennt sind.
So funktioniert es also nicht:
Open datei For Input As FileNum
 Do Until Eof(FileNum)
 Line Input #FileNum ,datensatz
 Loop
Close #FileIm

Die Daten stehen an definierten Positionen.

Andreas
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: koehlerbv am 01.07.04 - 15:52:08
Lies das File doch als Binary File aus - dann kannst Du es "häppchenweise" auswerten. An Hand eines mitgeführten Zählers weisst Du ja, was Du gerade liest.

HTH,
Bernhard
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: Glombi am 01.07.04 - 15:59:12
Das habe ich versucht, aber es funktioniert nicht. Hast Du zufällig ein Beispielscript?

Es wird was ausgelesen, allerdings in welchem Format (Sscreenshot)
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: Thomas Schulte am 01.07.04 - 16:18:33
Wenn ich nicht komplett bescheuert bin dann ist doch im DTA die Länge eines Records bekannt. Oder?
Dann probiers doch mit

Open fileName$ For Random As fileNum% Len = DTARecLen

und Lesen kannst du das ganze dann häppchenweise mit:

Do While Not EOF(fileNum%)
   Get #fileNum%, , rec
Loop

Sollte fusionieren.

Thomas
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: Glombi am 01.07.04 - 16:22:54
Das hatte ich schon versucht, er geht aber gar nicht in die Schleife, d.h.
Do While Not EOF(fileNum%)
ist false !?
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: koehlerbv am 01.07.04 - 16:26:17
Bin ich nur bescheuert - ich bekomme bei Binary auch die merkwürdigsten Resultate ... Ich bin aber dran.

Bernhard
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: AC am 01.07.04 - 16:30:06
Hi Glombi,

ich hab mit nem Kollegen bei meiner alten Firma mal was gemacht bei dem Bankeinzüge auf Diskette geschrieben wurden und dann zusammen mit Datenträgerbegleitschein an die Bank übergeben wurde, damit die Bank dann die Einzüge eintreibt.

Wenn ich mich recht erinnere war das eine feste Satzlänge bei den einzelnen Datensätzen.

Ist es sowas was Du brauchst ?
Wenn ja, dann müsste ich mal zu hause auf meinen alten Rechnern wühlen.


Laß michs wissen, wenn ich nachdem zu Hause mal suchen soll. (wenn Du das in Grundzügen brauchst, was ich oben schrieb.)

Gruß Holcomb
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: Glombi am 01.07.04 - 16:41:27
Genau das brauche ich.
Ich will aus einer dta die Records lesen, nach nicht erlaubten Zeichen suchen und diese dann löschen. Dazu wollte ich Record für Record lesen, suchen und ersetzen und dann in eine neue Datei schreiben.
Aber ich kriege nicht mal das lesen hin  :(
Wahrscheinlich muss man noch Unicode oder sowas umwandeln...

Andreas
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: AC am 01.07.04 - 16:46:41
Ich guck mal zu Hause auf alten Rechnern nach.
Ist schon vier bis 5 Jahre her, daß wir das gemacht haben und wir haben die Datei nur geschrieben nicht gelesen.
Kann mich nicht mehr richtig dran erinnern wie wir das gemacht haben.
Mal sehen was ich noch finde

Bis morgen. Holcomb
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: koehlerbv am 01.07.04 - 16:52:06
Also, Binary geht schon erstmal. Wichtig: Dieses Konstrukt funktioniert (logischerweise) nur in R6. Für R5 muss ich mir noch was ausdenken, das es den Datentype Byte dort ja nicht gibt und Integer immer dann scheitert, wenn die FileLen ungerade ist.

Code
Sub Click(Source As Button)
   
   Dim iFileNum As Integer
   Dim szFileName As String
   Dim iPosition As Integer
   Dim szResult As String
   Dim szChar As String
   Dim iByte As Byte
   
   iPosition = 1
   iFileNum = Freefile ()
   szFileName = "c:\tmp\0test.txt"
   
   Open szFileName For Binary As #iFileNum
   
   Do Until Eof (iFileNum)
      Get iFileNum, , iByte
      szResult = szResult & Chr$ (iByte)
      iPosition = iPosition + 1
   Loop
   
   
   Close iFileNum   
   
   Msgbox szResult
End Sub

Bernhard
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: koehlerbv am 01.07.04 - 16:55:46
Nachtrag:
Wenn Du Zeichen ersetzen willst, dann wäre Binary wohl das Ideale für Dich: Byte mit Get aus Datei 1 holen, ggf. ersetzen und zurück in Datei 2 schreiben. Die Zwischenschritte über Records und deren Auswertung können so entfallen.

Bernhard
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: Glombi am 01.07.04 - 16:58:25
1000 Dank erstmal. Ich muss jetzt weg und melde mich dann später nochmal...

R6 sollte gehen, Du brauchst also wg. R5 nichts zu ändern!

Andreas
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: koehlerbv am 01.07.04 - 17:06:20
Das interessiert mich aber selber. So, wie das in R5 implementiert ist, ist es ja völlig nutzlos für tatsächlich byteweises Lesen. Ein String*1 hilft da auch überhaupt gar nichts !

Bernhard
Titel: Re:DTA Dateien per Script lesen / schreiben
Beitrag von: koehlerbv am 01.07.04 - 18:33:46
Mit List und Tücke und auf Umwegen kommt man doch ans Ziel - auch unter R5  ;D

Hier ein Beispiel, wie man Open For Binary auch byteweise unter R5 hinbekommt:

Code
Sub Click(Source As Button)
   
   Dim iFileNum As Integer
   Dim szFileName As String
   Dim iPosition As Integer
   Dim szResult As String
   Dim iRead As Integer
   Dim iResult As Integer
   
   iFileNum = Freefile ()
   szFileName = "c:\tmp\0-test5.txt"
   
   Open szFileName For Binary As #iFileNum
   
   iPosition = 1
   
   If Eof (iFileNum) Then Exit Sub      'File does not exist or is empty !
   
   Do Until Eof (iFileNum)
      Get #iFileNum, iPosition, iRead
      iResult = iRead And 255
      szResult = szResult & Chr$ (iResult)
      iPosition = iPosition + 1   
   Loop
   iResult = (iRead And 65280) / 256
   szResult = szResult & Chr$ (iResult)
   
   Close iFileNum   
   
   Msgbox szResult
   
End Sub

Zur jeweiligen Verarbeitung steht das empfangene Byte in der Integer-Variablen iResult - das Zusammenschnüren des Ergebnisses im String szResult dient lediglich der Demonstration / Visualisierung. Der Trick besteht einfach darin, dass im Binary-Modus immer soviel Zeichen eingelesen werden, wie die für Get vorgesehene Variable von Hause aus verbraucht. Dummerweise bietet LS in R5 keinen Ein-Byte-Variablentyp wie R6 mit Byte. Also lesen wir eben immer zwei Byte in eine Integer-Variable ein und holen uns das interessierende Lower - bzw. am Ende Higher Byte heraus.

Bernhard
Titel: Re:DTA Dateien per Script schreiben
Beitrag von: cococo69 am 24.05.05 - 12:11:15
Hi Glombi,

ich hab mit nem Kollegen bei meiner alten Firma mal was gemacht bei dem Bankeinzüge auf Diskette geschrieben wurden und dann zusammen mit Datenträgerbegleitschein an die Bank übergeben wurde, damit die Bank dann die Einzüge eintreibt.

...

Hallo Alexander,

genau sowas bräuchte ich momentan gerade (Schreiben von DTA-Dateien).
Hast du oder sost wer sowas gerade parat bevor ich mich in die Spezifikationen von DTAUS-Dateien einlese?

Gruß
Armin
Titel: Re: DTA Dateien per Script lesen / schreiben
Beitrag von: aki am 24.05.05 - 21:41:33
Hi,

habe mich auch gerade in die DTA-Strukturen für ZV-Dateien eingearbeitet.

Wenn jemand Infos braucht, helfe ich gerne aus.

Das Lesen der Dateien würde ich in Notes per Java machen.

Grüße,
Andreas
Titel: Re: DTA Dateien per Script lesen / schreiben
Beitrag von: cococo69 am 31.05.05 - 15:35:14
Hallo,

da sich weder Andreas (aki - auf eine PM) noch Alexander meldet (sind wohl beide im Urlaub ;D) nochmal die Frage an alle:

Hat jemand ein Grundgerüst zum Erstellen von DTA-Dateien aus Notes das er/sie mir zur Verfügung stellen kann?

Gruß
Armin
Titel: Re: DTA Dateien per Script lesen / schreiben
Beitrag von: Semeaphoros am 31.05.05 - 16:00:04
Schon interessant, solche Sachen waren früher mal unser täglich Brot ....  ;)

Tatsächlich müsste das ganze sowohl über Random als auch über Binary Filehandles abwickelbar sein.

Die wohl einfachste Variante, die auch R5 tauglich sein sollte, müsste über Random und eine User-Type Variable gehen (in alten Basic-Versionen gabs dafür noch den Record Befehl ...  ;D ). Mit der Struktur, die ein DTA-File aufweist, heisst es dann aber aufpassen, dass man nicht mit variablen Strings sondern mit Fixed-Length Strings arbeitet.

Sorry, ich hab auch kein Grundgerüst dafür .... ich werd aber mal versuchen, ob ich das im Prinzip wieder hinbekomme.
Titel: Re: DTA Dateien per Script lesen / schreiben
Beitrag von: Semeaphoros am 31.05.05 - 17:37:49
So, hier ein rasch zusammegeklöppelter "Proof of concept", ohne Struktur, ohne Errorhandling und was sonst noch dazu kommt, zeigt einfach das Prinzip und lässt sich auch ausprobieren:

Code
Type recorddata
	anInteger As Integer
	aDouble As Double
	aString10 As String*10
	aString15 As String*15
End Type

Sub WriteData
	
	
	Dim filenum As Integer
	Dim Record As RecordData
	
	filenum = Freefile
	Open "testfile.dta" For Random Access Write As fileNum Len = Len(Record)
	
	record.anInteger=1
	record.aDouble=10.456
	record.aString10="1st  Rec"
	record.aString15="1st String 15"
	Put #fileNum, , record
	
	record.anInteger= 2
	record.aDouble=3.15432
	record.aString10="2nd Record"
	record.aString15="2nd String 15"
	Put #fileNum, , record
	
	
	record.anInteger=3
	record.aDouble=1.45612342d15
	record.aString10="3rd Record"
	record.aString15="3rd String 15"
	Put #fileNum, , record
	
	Close filenum
	
End Sub

Sub ReadData	
	
	Dim filenum As Integer
	Dim Record As RecordData
	
	filenum = Freefile
	Open "testfile.dta" For Random Access Read As fileNum Len = Len(Record)
	
	Do While Not Eof(filenum)
		Get #fileNum, , record		
	Loop
	
	Close filenum
	
End Sub


Daraus lässt sich jetzt under Anpassung des Record-Types (im Falle von DTA durchgängig mit Fixed-Length Strings) der DTA-Access problemlos realisieren.