
26705
25.06.2007, aktualisiert um 15:43:16 Uhr
Einzelne Zeichen und Strings aus Datei auslesen
Moin!
Ich habe hier ein kleines Problem, liegt wohl hauptsächlich in meiner fehlenden Erfahrung unter VB & co.
Ich muss verschiedene Dateien innerhalb eines Ordners auslesen und die gewünschten Teile möglichst Excel-kompatibel (ist aber nicht so wichtig) in eine einzige neue Datei schreiben.
Die Dateien sind ca. so aufgebaut:
Steuerzeichenzeichezeichenzeichen123 nochmehrzeichen
name1 text
name2 text
name3 text
name4 text
name5 text
name6 text
name7 text
name8 text
name9 text
usw...
Das fettgedruckte soll ich nun auslesen und in eine andere Datei schreiben.
In der ersten Zeile sind die Zeichen immer an der gleichen Stelle, es sind immer 6 Zeichen.
Darauf folgen ca. 40 - 60 Zeilen, je nach Inhalt ist die Anzahl und somit die Zeilennummer dynamisch.
Dort sollen jetzt noch 5-6 Strings aus verschiedenen Zeilen ausgelesen werden, jeweils ein String pro Zeile.
Allerdings nur, wenn diese Zeile auch vorhanden ist.
Die Zeilen sind immer nach folgendem Schema:
Variablenname1 Wunschstring1
Variablenname2 Wunschstring2
Mein größtes Problem bei der Sache ist, das dieser komplette Block in einigen Datein nur ein Mal vorkommt,
in einigen Dateien aber auch mehrfach vorkommen kann.
Ein solcher Block fängt allerdings immer mit den gleichen fünf Steuerzeichen an.
Ich hoffe ich konnte mein Problem einigermaßen verständlich schildern.
Bin für jede Hilfe und jeden Denkanstoß dankbar.
Gruß,
Seppel
Ich habe hier ein kleines Problem, liegt wohl hauptsächlich in meiner fehlenden Erfahrung unter VB & co.
Ich muss verschiedene Dateien innerhalb eines Ordners auslesen und die gewünschten Teile möglichst Excel-kompatibel (ist aber nicht so wichtig) in eine einzige neue Datei schreiben.
Die Dateien sind ca. so aufgebaut:
Steuerzeichenzeichezeichenzeichen123 nochmehrzeichen
name1 text
name2 text
name3 text
name4 text
name5 text
name6 text
name7 text
name8 text
name9 text
usw...
Das fettgedruckte soll ich nun auslesen und in eine andere Datei schreiben.
In der ersten Zeile sind die Zeichen immer an der gleichen Stelle, es sind immer 6 Zeichen.
Darauf folgen ca. 40 - 60 Zeilen, je nach Inhalt ist die Anzahl und somit die Zeilennummer dynamisch.
Dort sollen jetzt noch 5-6 Strings aus verschiedenen Zeilen ausgelesen werden, jeweils ein String pro Zeile.
Allerdings nur, wenn diese Zeile auch vorhanden ist.
Die Zeilen sind immer nach folgendem Schema:
Variablenname1 Wunschstring1
Variablenname2 Wunschstring2
Mein größtes Problem bei der Sache ist, das dieser komplette Block in einigen Datein nur ein Mal vorkommt,
in einigen Dateien aber auch mehrfach vorkommen kann.
Ein solcher Block fängt allerdings immer mit den gleichen fünf Steuerzeichen an.
Ich hoffe ich konnte mein Problem einigermaßen verständlich schildern.
Bin für jede Hilfe und jeden Denkanstoß dankbar.
Gruß,
Seppel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 62244
Url: https://administrator.de/forum/einzelne-zeichen-und-strings-aus-datei-auslesen-62244.html
Ausgedruckt am: 03.05.2025 um 10:05 Uhr
6 Kommentare
Neuester Kommentar
Hallo SeppelCeh!
Verstehe ich das zur ersten Zeile richtig: Aus den ersten 11 Zeichen, von denen die ersten 5 feststehen, werden diese (demnach ohnehin immer Gleichen) und die Zeichen 9 bis 11 benötigt?
Wenn Du "Block" schreibst, meinst Du dann , dass etwa der text nach name1 nur (einmal) interessiert, wenn bereits vorher die Steuerzeichen gefunden wurden, also daraus ein Datensatz für den Excel-Import werden soll?
Falls ja: Soll der Aufbau dieses Satzes etwa so aussehen: Steuerzeichen;123;text;text;...
Grüße
bastla
Verstehe ich das zur ersten Zeile richtig: Aus den ersten 11 Zeichen, von denen die ersten 5 feststehen, werden diese (demnach ohnehin immer Gleichen) und die Zeichen 9 bis 11 benötigt?
Wenn Du "Block" schreibst, meinst Du dann , dass etwa der text nach name1 nur (einmal) interessiert, wenn bereits vorher die Steuerzeichen gefunden wurden, also daraus ein Datensatz für den Excel-Import werden soll?
Falls ja: Soll der Aufbau dieses Satzes etwa so aussehen: Steuerzeichen;123;text;text;...
Grüße
bastla
Hallo SeppelCeh!
Da Du in Deinen Angaben wenig konkret warst, musste ich auch das Script eher allgemein halten:
Die Werte am Anfang des Scripts (Zieldatei, die einzelnen Steuerzeichen - ev als Chr(x) geschrieben, die Positionsangaben zur "Nummer" - von mir so bezeichnet, weil Du im ersten Beispiel "123" verwendet hast - aus der Steuerzeile, die konstanten
"Variablen" - ich nenne sie "Keys" - und das Trennzeichen für den Import) musst Du natürlich anpassen.
Als Wert des einzelnen "Keys" wird jeweils der Rest der Zeile (nach dem Leerzeichen) verwendet.
Wurde ein "Key" nicht gefunden, wird in der Datenzeile der Platz dafür frei gelassen (es folgen dann 2 Trennzeichen aufeinander - damit bleibt der Satzaufbau erhalten). Gefunden wird ein "Key" nur bei exakt gleicher Schreibweise (Groß-/Kleinschreibung) - lässt sich natürlich ändern.
Um damit verschiedene Quelldateien bearbeiten zu können, erwartet das Script die jeweilige Ausgangsdatei als Argument - damit wird zB auch eine Kommandozeileneingabe der Art
sowie die Übergabe per Drag & Drop aus dem Explorer möglich.
Grüße
bastla
Da Du in Deinen Angaben wenig konkret warst, musste ich auch das Script eher allgemein halten:
strOutFile = "D:\Import.txt"
strCtrl = "S" & "t" & "e" & "u" & "Z"
intNumberFrom = 25
intNumberTo = 30
aKeys = Array("name1", "name2", "name4", "name6", "name7", "name9")
strDelim = ";"
' Ab hier (hoffentlich) keine Änderungen erforderlich ...
intNoOfKeys = UBound(aKeys)
Dim aKeysLen(), aValues()
ReDim aKeysLen(intNoOfKeys)
For i = 1 To intNoOfKeys
aKeysLen(i) = Len(aKeys(i))
Next
intCtrlLen = Len(strCtrl)
intNumberLen = intNumberTo - intNumberFrom + 1
If intNumberLen < 1 Then
WScript.Echo "Bereich für Nummer aus erster Zeile nicht korrekt!"
WScript.Quit(1)
End If
If WScript.Arguments.Count < 1 Then
WScript.Echo "Bitte eine Datei als Argument übergeben!"
WScript.Quit(1)
Else
strInFile = WScript.Arguments(0)
End If
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(strInFile) Then
WScript.Echo "Die Datei " & strInFile & " wurde nicht gefunden!"
WScript.Quit(1)
End If
aLines = Split(fso.OpenTextFile(strInFile, 1).ReadAll, vbCrLF)
Set objOutFile = fso.OpenTextFile(strOutFile, 8, True)
blnFound = False
For i = 0 to UBound(aLines)
strThisLine = aLines(i)
If blnFound Then
If Left(strThisLine, intCtrlLen) = strCtrl Then
blnFound = False
strLine = strNumber
For j = 1 To intNoOfKeys
strLine = strLine & strDelim & aValues(j)
Next
objOutFile.WriteLine strLine
End If
For j = 1 To intNoOfKeys
If Left(strThisLine, aKeysLen(j)) = aKeys(j) Then
aValues(j) = Mid(strThisLine, aKeysLen(j) + 2)
Exit For
End If
Next
End If
If Not blnFound Then
If Left(strThisLine, intCtrlLen) = strCtrl Then
blnFound = True
strNumber = Mid(strThisLine, intNumberFrom, intNumberLen)
ReDim aValues(intNoOfKeys)
End If
End If
Next
If blnFound Then
strLine = strNumber
For j = 1 To intNoOfKeys
strLine = strLine & strDelim & aValues(j)
Next
objOutFile.WriteLine strLine
End If
objOutFile.Close
WScript.Echo "Done: " & strInFile
Als Wert des einzelnen "Keys" wird jeweils der Rest der Zeile (nach dem Leerzeichen) verwendet.
Wurde ein "Key" nicht gefunden, wird in der Datenzeile der Platz dafür frei gelassen (es folgen dann 2 Trennzeichen aufeinander - damit bleibt der Satzaufbau erhalten). Gefunden wird ein "Key" nur bei exakt gleicher Schreibweise (Groß-/Kleinschreibung) - lässt sich natürlich ändern.
Um damit verschiedene Quelldateien bearbeiten zu können, erwartet das Script die jeweilige Ausgangsdatei als Argument - damit wird zB auch eine Kommandozeileneingabe der Art
for %i in (D:\Testdaten\Test*.txt) do @cscript //nologo Script.vbs "%i"
Grüße
bastla