Autor Thema: DTA Dateien per Script lesen / schreiben  (Gelesen 7389 mal)

Glombi

  • Gast
DTA Dateien per Script lesen / schreiben
« 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:DTA Dateien per Script lesen / schreiben
« Antwort #1 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

Glombi

  • Gast
Re:DTA Dateien per Script lesen / schreiben
« Antwort #2 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)
« Letzte Änderung: 01.07.04 - 16:05:48 von Glombi »

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re:DTA Dateien per Script lesen / schreiben
« Antwort #3 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
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Glombi

  • Gast
Re:DTA Dateien per Script lesen / schreiben
« Antwort #4 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 !?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:DTA Dateien per Script lesen / schreiben
« Antwort #5 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

Offline AC

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
Re:DTA Dateien per Script lesen / schreiben
« Antwort #6 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
Microsoft Certified Technology Specialist Microsoft Dynamics NAV 5.0 C/Side Introduction
Microsoft Certified Technology Specialist Microsoft Dynamics NAV 5.0 C/Side Solution Development

"...Glücklich ist, wer vergisst, was doch nicht zu ändern ist..."

Glombi

  • Gast
Re:DTA Dateien per Script lesen / schreiben
« Antwort #7 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

Offline AC

  • Senior Mitglied
  • ****
  • Beiträge: 367
  • Geschlecht: Männlich
Re:DTA Dateien per Script lesen / schreiben
« Antwort #8 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
Microsoft Certified Technology Specialist Microsoft Dynamics NAV 5.0 C/Side Introduction
Microsoft Certified Technology Specialist Microsoft Dynamics NAV 5.0 C/Side Solution Development

"...Glücklich ist, wer vergisst, was doch nicht zu ändern ist..."

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:DTA Dateien per Script lesen / schreiben
« Antwort #9 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:DTA Dateien per Script lesen / schreiben
« Antwort #10 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

Glombi

  • Gast
Re:DTA Dateien per Script lesen / schreiben
« Antwort #11 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:DTA Dateien per Script lesen / schreiben
« Antwort #12 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:DTA Dateien per Script lesen / schreiben
« Antwort #13 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

Offline cococo69

  • @Notes Preisträger
  • Senior Mitglied
  • ****
  • Beiträge: 286
  • Geschlecht: Männlich
  • Super dieses Forum!!!
    • Mein Hobby...
Re:DTA Dateien per Script schreiben
« Antwort #14 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

Offline aki

  • Frischling
  • *
  • Beiträge: 13
  • Geschlecht: Männlich
  • You never know.
Re: DTA Dateien per Script lesen / schreiben
« Antwort #15 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

Offline cococo69

  • @Notes Preisträger
  • Senior Mitglied
  • ****
  • Beiträge: 286
  • Geschlecht: Männlich
  • Super dieses Forum!!!
    • Mein Hobby...
Re: DTA Dateien per Script lesen / schreiben
« Antwort #16 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

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: DTA Dateien per Script lesen / schreiben
« Antwort #17 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.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: DTA Dateien per Script lesen / schreiben
« Antwort #18 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.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz