Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
916to920
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datenfiles manipulieren

Datenfiles manipulieren
21.10.2007 17:30:41
Kretschi
Hallo,
ich habe folgendes Problem: Ich möchte gerne verschiedene Datenfiles manipulieren (einige Werte ändern) und danach unter gleichen Dateinamen speichern. Es handelt sich jedoch nicht um gewöhnliche Textfiles sondern um Dateien mit den Endungen wie .dat, .STA, .ERR, .ERL, ... . Der Datenimport in Excel ist mir schon geglückt und ich denke ich weiß auch wie ich einzelne Werte ändern kann. Nun muss ich aber die geänderten Daten im selben Format und mit der gleichen Endung abspeichern bzw. exportieren. Die Datei muss danach auch exakt gleich aussehen, damit das andere Programm die Daten verarbeiten kann.
Hat mir jemand vielleicht einen guten Tipp!? Und ist meine gedachte Vorgehensweise die Richtige?
Ihr würdet mir sehr helfen!
MFG Kretschi

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenfiles manipulieren
21.10.2007 18:29:00
Tino
Hallo,
hier mal ein Beispiel, so müsste es funktionieren.

Sub testSchreiben()
Dim strText As String
Dim lngFn As Long
Dim strPathAndFileName As String
Dim Bereich As Range
For Each Bereich In Range("A1:A20") 'Bereich für Text angeben!!!
strText = strText & Bereich & vbCrLf
Next Bereich
strPathAndFileName = "C:\ip fritz.txt" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
Put lngFn, 1, strText
Close lngFn
End Sub


Gruss Tino

Das Forum lebt von Rückmeldungen!


Anzeige
AW: Lesen und danach schreiben
21.10.2007 18:50:00
Tino
Hallo,
um ihn sauper zu schreiben sollest du Ihn Binar einlesen und erst danach wieder Schreiben.
so müsste es gehen erst Lesen und danach schreiben

Sub lesen()
Dim strText As String
Dim lngFn As Long, a As Long
Dim strPathAndFileName As String
Dim vntA As Variant
strPathAndFileName = "C:\Test.dat" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
strText = Space(LOF(lngFn))
Get lngFn, 1, strText
Close lngFn
vntA = Split(strText, vbCrLf)
On Error GoTo stopp
For a = 1 To 60000
Cells(a, 1) = Split(vntA(a), vbCrLf)
Next a
stopp:
Range("C1") = a - 1
End Sub
Sub testSchreiben()
Dim strText As String
Dim lngFn As Long
Dim strPathAndFileName As String
Dim Bereich As Range
For Each Bereich In Range("A1:A" & Range("C1")) 'Bereich für Text angeben!!!
strText = strText & Bereich & vbCrLf
Next Bereich
strPathAndFileName = "C:\Test.dat" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
Put lngFn, 1, strText
Close lngFn
End Sub


Gruss Tino

Das Forum lebt von Rückmeldungen!


Anzeige
AW: Lesen und danach schreiben
21.10.2007 19:57:00
Kretschi
Hey Tino,
vielen Dank für deine Antwort. Ich habe es eben ausprobiert und es funktioniert schon recht gut, vorallem das Schreiben. Ein paar Fragen hätte ich aber noch.
Leider wird die erste Zeile der Datei nicht mit eingelesen. Hab probiert die For-Schleife von 0 aus laufen zu lassen, das geht aber nicht.
Das nächste ist, dass alle Werte einer Zeile in eine Zelle kopiert werden. Jeder Wert sollte aber in einer extra Zelle stehen, so dass ich ihn verändern kann.
Beim lesen einer Datei mit sehr vielen Leerzeilen hatte ich auch das Problem das die Werte als Text geschrieben wurden. Dies ist in sofern schön, dass beim neuen Schreiben die Werte exaKt an der selben Stelle im neuen File stehen, sie aber wenn ich sie verändere am Anfang einer jeder Zeile des neuen Files stehen. Ich muss noch überprüfen ob dies beim späteren Einlesen ein Problem darstellt.
Wäre super nett, wenn du mir in Sachen Punkt eins und zwei noch weiterhelfen könntest!
MFG Kretschi

Anzeige
AW: Lesen und danach schreiben
21.10.2007 20:20:11
tino
Hallo,
erstes habe ich behoben, war ein Denkfehler von mir. Sorry
zu zweitens:
ist nicht so einfach, da die Daten genau so zurück geschrieben werden müssen, sonst wird eventuell (bin mir sogar ziemlich sicher), diese Datei von deinem anderen Programm nicht mehr verarbeitet!

Sub lesen()
Dim strText As String
Dim lngFn As Long, a As Long
Dim strPathAndFileName As String
Dim vntA As Variant
strPathAndFileName = "C:\Test.dat" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
strText = Space(LOF(lngFn))
Get lngFn, 1, strText
Close lngFn
vntA = Split(strText, vbCrLf)
On Error GoTo stopp
For a = 0 To 60000
Cells(a + 1, 1) = vntA(a)
Next a
stopp:
Range("C1") = a
End Sub
Sub testSchreiben()
Dim strText As String
Dim lngFn As Long
Dim strPathAndFileName As String
Dim Bereich As Range
For Each Bereich In Range("A1:A" & Range("C1")) 'Bereich für Text angeben!!!
strText = strText & Bereich & vbCrLf
Next Bereich
strPathAndFileName = "C:\Test.dat" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
Put lngFn, 1, strText
Close lngFn
End Sub


Gruss Tino

Anzeige
AW: Lesen und danach schreiben
21.10.2007 20:32:00
Kretschi
Hey Tino,
erste Zeile ist jetzt auch an Bord!
Ich muss aber leider unbedingt die Werte mittels Makro verändern können und dazu müssen sie doch in einzelnen Zellen stehen!? Würde es denn nicht gehen, wenn man die Sache mit der Zeilenanzahl (C1) wegließe, die Daten in einzelne Zelle einlesen (kopieren) würde und man beim schreiben dann einfach den ganzen Range aller belegten Zellen angeben würde. Die Anzahl der Werte jeder Datei bleibt nämlich konstant.
MFG Kretschi

AW: Lesen und danach schreiben
21.10.2007 21:10:00
Tino
Hallo,
hier zum leser für Einzelwerte.
Aber ich weis noch nicht, wie ich dass mit den Zeilenumbrüchen zurückschreiben kann.

Sub lesen()
Dim strText As String
Dim lngFn As Long, a As Long
Dim strPathAndFileName As String
Dim vntA As Variant
strPathAndFileName = "C:\Test.dat" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
strText = Space(LOF(lngFn))
Get lngFn, 1, strText
Close lngFn
strText = Replace(strText, vbCrLf, " ")
vntA = Split(strText, " ")
On Error GoTo stopp
For a = 0 To 60000
Cells(a + 1, 1) = vntA(a)
Next a
stopp:
End Sub


Gruss
Tino

Anzeige
AW: Lesen und danach schreiben
21.10.2007 22:41:03
Kretschi
Vielen Dank! Ist echt ne große Hilfe!
Gruß Kretschi

AW: Lesen und danach schreiben
21.10.2007 23:00:59
Tino
Hallo,
habe noch dieses anzubieten, du musst aber mit einem @ in Spalte B auskommen.

Sub lesen()
Dim strText As String
Dim lngFn As Long, a As Long
Dim strPathAndFileName As String
Dim vntA As Variant, vntB As Variant
Cells.Clear
strPathAndFileName = "C:\Test.dat" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
strText = Space(LOF(lngFn))
Get lngFn, 1, strText
Close lngFn
'strText = Replace(strText, vbCrLf, " ")
vntA = Split(strText, " ")
On Error GoTo stopp
For a = 0 To 60000
If UBound(Split(vntA(a), vbCrLf)) > 0 Then
vntB = Split(vntA(a), vbCrLf)
For b = 0 To UBound(Split(vntA(a), vbCrLf)) - 1
Cells(a + 1, 1) = vntB(b)
Cells(a + 1, 2) = "@"
a = a + 1
Next b
Else
Cells(a + 1, 1) = vntA(a)
End If
Next a
stopp:
Range("C1") = a
End Sub
Sub testSchreiben()
Dim strText As String
Dim lngFn As Long
Dim strPathAndFileName As String
Dim Bereich As Range
For Each Bereich In Range("A1:A" & Range("C1")) 'Bereich für Text angeben!!!
strText = strText & Bereich & " "
If Bereich.Offset(0, 1) > "" Then
strText = Left(strText, Len(strText) - 1) & Bereich.Offset(0, 1) ' vbCrLf
End If
Next Bereich
strText = Replace(strText, "@", vbCrLf)
strPathAndFileName = "C:\Test.dat" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
Put lngFn, 1, strText
Close lngFn
End Sub


Gruss
Tino

Anzeige
AW: Lesen und danach schreiben
21.10.2007 23:48:16
Tino
Hallo,
habe noch einen Fehler gefunden!

Sub lesen()
Dim strText As String
Dim lngFn As Long, a As Long, Zähler As Long
Dim strPathAndFileName As String
Dim vntA As Variant, vntB As Variant
Cells.Clear
strPathAndFileName = "C:\Test.dat" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
strText = Space(LOF(lngFn))
Get lngFn, 1, strText
Close lngFn
'strText = Replace(strText, vbCrLf, " ")
vntA = Split(strText, " ")
Zähler = 1
On Error GoTo stopp
For a = 0 To 60000
If UBound(Split(vntA(a), vbCrLf)) > 0 Then
vntB = Split(vntA(a), vbCrLf)
For b = 0 To UBound(Split(vntA(a), vbCrLf)) - 1
Cells(Zähler, 1) = vntB(b)
Cells(Zähler, 2) = "@"
Zähler = Zähler + 1
Next b
Else
Cells(Zähler, 1) = vntA(a)
Zähler = Zähler + 1
End If
Next a
stopp:
Range("C1") = Zähler - 1
End Sub
Sub testSchreiben()
Dim strText As String
Dim lngFn As Long
Dim strPathAndFileName As String
Dim Bereich As Range
For Each Bereich In Range("A1:A" & Range("C1")) 'Bereich für Text angeben!!!
strText = strText & Bereich & " "
If Bereich.Offset(0, 1) > "" Then
strText = Left(strText, Len(strText) - 1) & Bereich.Offset(0, 1) ' vbCrLf
End If
Next Bereich
strText = Replace(strText, "@", vbCrLf)
strPathAndFileName = "C:\Test.dat" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn
Put lngFn, 1, strText
Close lngFn
End Sub


Gruss
Tino

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige