ich habe ein Programm, das Daten von einer *.txt Datei einliest und verarbeitet.(Semikolon getrennt)
Dummerweise wird diese Datei nun als *.csv geliefert, ebenfalls Semikolon getrennt.
Da das Programm sehr komplex ist, will ich lieber die csv in die txt Variante konvertieren, als ein neues Programm zu schreiben.
Hexadezimal kann ich keinen Unterschied zwischen den Dateien feststellen, außer, dass die eine im DOS Format und die andere im UNIX Format geliefert wird.
Die simple Variante Datei umbenennen in *.txt funktioniert nicht.
Wenn ich jedoch mit einem Hexeditor (mein Favorit ist UltraEdit) die csv Datei von UNIX nach DOS konvertiere und dann umbenenne, ist alles bestens.
Lange Vorrede, aber jetzt kommt der Moment, wo der Frosch ins Wasser rennt:
Hat jemand eine Idee, wie ich per Access (ich benutze 97) per VBA dazu bringen kann eine (Text)Datei von UNIX in DOS zu konvertieren.
Function Unix2Dos(OldText As String, NewText As String)
Dim x As String, Endvalue As Integer
Dim StartValue As Integer, OutputTxt As String
Open OldText For Input As #1
Open NewText For Output As #2
Do Until EOF(1)
Line Input #1, x
Endvalue = InStr(1, x, Chr(10))
StartValue = 1
Do Until Endvalue = 0
If Endvalue \> 0 Then
OutputTxt = Mid(x, 1, (Endvalue - 1))
Print #2, OutputTxt
StartValue = Endvalue + 1
x = Mid(x, StartValue)
Endvalue = InStr(1, x, Chr(10))
End If
Loop
Loop
Close #1
Close #2
End Function
habe gerade Deine Antwort gelesen und das sieht sehr gut aus, genau das was ich suchte, dass mir jemand gleich eine fertige Function zur Verfügung stellt, hätte ich nicht gedacht.
Vielen Dank im Voraus, werde es morgen testen mich dann nochmal melden.
Nur zu meinem Verständnis: Offensichtlich benutzt Unix (hexadezimal) einen anderen Zeichencode für den Zeilenumbruch, so lese ich jedenfalls deinen Code, nach dem suchst Du und schreibst dann die Daten neu.
Ich habe die Dateien natürlich auch hexadezimal verglichen (UltraEdit in einer uralten Version 8.x), dort war auf dem Bildschirm kein Unterschied zu erkennen, beim direkten Vergleich schon.
Hast Du oder jemand anderes eine Idee warum?
Die Funktion wird relativ langsam bei größerern Dateien, da sie praktisch die ganze Datei erst in einen String einliest und dann parst. Ich hatte damals nur kleine Dateien… Ansonsten muß man die Datei blockweise einlesen, macht aber mehr Programmieraufwand
Access kann nirgendwo mit Text-Dateien umgehen die mit einem Unix-Zeilenumschub versehen sind. Das sieht man auch in der Funktion. das „Line input“ liest normalerweise nur eine Zeile - in diesem Fall aber die ganze Datei.