PDA

Vollständige Version anzeigen : Textdateien: String finden, Zeilenumbrüche einfügen


Madrapour
11.03.2009, 09:18
Liebe Forum-User,

ich beziehe mich auf meinen vor ein paar Tagen angelegten Thread, der nun eine andere Richtung eingeschlagen hat.

http://www.ms-office-forum.net/forum/showthread.php?t=247645

Da es mir nicht gelungen ist, eine *.dbf-Datei (dBase IV) zu importieren bzw. auf Daten zuzugreifen, die jenseits der 65536. Zeile liegen, wandle ich diese in eine Textdatei um. So weit, so gut. Diese Textdatei muss jedoch für die Bearbeitung noch manipuliert werden, da sie nur aus einer einzigen Zeile besteht. Ich möchte also:

1. Zeichen löschen, bis die erste 1 gefunden wird (im Editor sind's IMMER 199 Cursorsprünge bis an die entsprechende Stelle.

2. Zeilenumbrüche einfügen (IMMER nach 59 weiteren Zeichen).

Ich hatte mir in etwa so etwas überlegt:

Sub DBF_Einlesen()

Verzeichnis = "C:\Daten"
dBaseFile = "Beispiel.dbf"
txtPendant = "Beispiel.txt"

ChDrive (Verzeichnis)
ChDir (Verzeichnis)

FileCopy dBaseFile, txtPendant

Open txtPendant For Input As #1
'erste 199 Zeichen löschen (inkl. Leerzeichen)
Do Until EOF(1)
'alle 59 Zeichen einen Zeilenumbruch einfügen
Loop
'Speichern in Output-Datei
Close

End Sub

Im Anhang befindet sich eine solche *.dbf-Datei mit dem entsprechenden Textfile. Zwar ist erstgenannte kleiner als 65536 Datensätze, aber es geht ja ums Prinzip.

Wer kann mir da weiterhelfen? Bin gespannt, ob's jemand hinbekommt, es würde mich einen Riesenschritt voranbringen.

Vielen Dank,

Stefan.

Wilhelm1
11.03.2009, 22:39
Etwa so?

Madrapour
12.03.2009, 07:12
Hallo Wilhelm1,

vielen Dank vorab. Ich habe es eben nur kurz testen können und bekomme eine Fehlermeldung wg.: Application.FileDialog(msoFileDialogOpen) Liegt am fehlenden Verweis zu Microsoft Office Library 11, welches ich jedoch in der Verweisliste nicht finde.

Da ich jetzt einen Auswärtstermin habe, kann ich mich erst später drum kümmern. Melde mich dann evtl. mit Fragen wieder.

Vielen Dank jedoch schon einmal!!

Stefan.

ebs17
12.03.2009, 10:31
Liegt am fehlenden Verweis zu Microsoft Office Library 11, welches ich jedoch in der Verweisliste nicht finde.
Bei Excel2000 wirst Du die Version 9 finden.

Madrapour
13.03.2009, 10:43
Hallihallo,

Bei Excel2000 wirst Du die Version 9 finden.

Ja, das hatte ich auch aktiviert, aber irgendwie lief's trotzdem nicht. Was aber egal ist, weil sich das Ganze im FileOpen-Dialog abspielte, den ich für meine Bedürfnisse eh nicht brauche.

Habe jetzt Wilhelms Code wie folgt an meine Bedürfnisse angepasst: Sub DBFtoTXT()

Dim strVerzeichnis As String, strFileDBF As String
Dim strFileTXT As String, strFileNew As String
Dim bytChar As Byte
Dim iCount_1 As Integer, iCount_2 As Integer

strVerzeichnis = "C:\Daten"
strFileDBF = "Beispiel.dbf"
strFileTXT = "Beispiel.txt"
strFileNew = "New_File.txt"

ChDrive (strVerzeichnis)
ChDir (strVerzeichnis)

FileCopy strFileDBF, strFileTXT

Open strFileTXT For Binary Access Read As #1

'Überspringe 199 Zeichen
iCount_1 = 0
Do
Get #1, , bytChar
iCount_1 = iCount_1 + 1
Loop Until iCount_1 = 200

Open strFileNew For Binary Access Write As #2
Put #2, , bytChar

'Schreibe 59 Zeichen in eine Zeile; Carriage Return
iCount_2 = 0
Do While Not EOF(1)
Get #1, , bytChar
If bytChar = 46 Then bytChar = 44 'Punkt zu Komma
iCount_2 = iCount_2 + 1
If iCount_2 = 59 Then
iCount_2 = 0
Put #2, , 13 '13: Carriage Return
End If
Put #2, , bytChar
Loop

Close #1
Close #2

MsgBox "Schon fertig!"

End Sub

Läuft 1A, bin sehr zufrieden. Danke für die Hilfe!!!

@ebs17: Sorry, dass ich noch nicht dazu gekommen bin, deinen Beitrag in DBF-Dateien einlesen (http://www.ms-office-forum.net/forum/showthread.php?t=247645) auszuwerten, aber ich war die letzten zwei Tage viel unterwegs... Werd mich jetzt drum kümmern.

Vielen Dank soweit!

Stefan.