Von Textdatei einen bestimmten Bereich auslesen
Ich versuche aus einer Textdatei einen bestimmten Bereich (z.b. zwischen zwei Tags) auszulesen
Hallo zusammen,
ich verzweifle gerade an einem Script, der mir das mühsame Suchen & Kopieren ersparen soll.
Aber von vorne.
Ich habe eine Exportdatei, in der zwischen zwei Tags " [bla] und [/bla] " ein Text steht, der aber unterschiedlich lang/groß ist.
Diesen würde ich gerne per Script (egal ob batch, vbs oder php/js oder andres) auslesen und in eine andere Datei speichern.
Das auslesen von Text funktioniert bei mir schon mal, aber das er mir unterschiedlich viel text zwischen zwei Tags ausliest klappt nicht, bzw. habe ich keine Ahnung wie ich das verwirklichen könnte. Hoffe ich schreib dies hier in das richtige Thead.
Bin um jeden Tipp dankbar.
Danke Greez laza
Hallo zusammen,
ich verzweifle gerade an einem Script, der mir das mühsame Suchen & Kopieren ersparen soll.
Aber von vorne.
Ich habe eine Exportdatei, in der zwischen zwei Tags " [bla] und [/bla] " ein Text steht, der aber unterschiedlich lang/groß ist.
Diesen würde ich gerne per Script (egal ob batch, vbs oder php/js oder andres) auslesen und in eine andere Datei speichern.
Das auslesen von Text funktioniert bei mir schon mal, aber das er mir unterschiedlich viel text zwischen zwei Tags ausliest klappt nicht, bzw. habe ich keine Ahnung wie ich das verwirklichen könnte. Hoffe ich schreib dies hier in das richtige Thead.
Bin um jeden Tipp dankbar.
Danke Greez laza
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 133215
Url: https://administrator.de/contentid/133215
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
19 Kommentare
Neuester Kommentar
Hallo laza!
Hier ein simples VB-Skript (*.vbs) mit den Beispiel-Tags <td>...</td>:
Die Textlänge ist hierbei ohne Bedeutung
Und hier findest Du noch Beispiele, wie das mit Batch geht:
Gruß Dieter
Hier ein simples VB-Skript (*.vbs) mit den Beispiel-Tags <td>...</td>:
Const oPath = "F:\Test\Old.Txt"
Const nPath = "F:\Test\New.Txt"
Const TagBeg = "<td>"
Const TagEnd = "</td>"
Dim oFile, nFile, Tags
Set Fso = CreateObject("Scripting.FileSystemObject")
Set oFile = Fso.OpenTextFile(oPath)
Set nFile = Fso.CreateTextFile(nPath)
Do Until oFile.AtEndOfStream
Tags = Split(oFile.ReadLine, TagBeg)
If UBound(Tags) = 1 Then nFile.WriteLine Split(Tags(1), TagEnd)(0)
Loop
oFile.Close: nFile.Close
MsgBox "Fertig"
Und hier findest Du noch Beispiele, wie das mit Batch geht:
Gruß Dieter
Moin laza86work,
willkommen im Forum.
Der Vollständigkeit halber auch noch eine reine Batchskizze als Orientierung:
--> alles (außer Leerzeilen] aus der Datei e:\schnipsel\Einbla.txt zwischen den Zeilen "[Bla]" und "[/Bla]" exklusive wird ausgegeben.
Grüße
Biber
willkommen im Forum.
Der Vollständigkeit halber auch noch eine reine Batchskizze als Orientierung:
:: ------- snipp JustTheblaSection.cmd -----
@echo off & setlocal
:: -- alles zeilenweise mit einer FOR /F -Anweisung an :Processline schicken
for /f "delims=" %%i in (e:\schnipsel\Einbla.txt) do call :ProcessLine "%%i"
goto :eof
::~~~~~~~~~~~~~
:ProcessLine Parameter1 ist eine ganze Zeile
If not defined ShowItNow (
if /i "%~1"=="[Bla]" set "ShowItNow=Jepp" && goto :eof
) ELSE (
if /i "%~1"=="[/Bla]" set "ShowItNow=" && goto :eof
)
if defined ShowItNow echo %~1
--> alles (außer Leerzeilen] aus der Datei e:\schnipsel\Einbla.txt zwischen den Zeilen "[Bla]" und "[/Bla]" exklusive wird ausgegeben.
Grüße
Biber
Moin laza86work,
Aber: Eigentlich haben wir dir schon verschiedene Werkzeuge in die Hand gedrückt.
Könnten wir es nicht so machen,dass wir dir z.B. bis heute abend ein wenig Zeit zum Versuchen und Puzzlen lassen und du dich dann noch mal meldest - sei es mit einer selbst gefundenen Lösung oder aber mit einem Rest-Problem, mit dem du nicht weiterkommst?
Wir verteilen hier lieber Angeln statt fertige Fischstäbchen...
Grüße
Biber
Zitat von @laza86work:
Ob der Lösungsansatz mit vbs oder batch ist, spielt für mich eigentlich keine Rolle.
Für uns auch niocht wirklich.... können (und werden) wir auch machen.Ob der Lösungsansatz mit vbs oder batch ist, spielt für mich eigentlich keine Rolle.
Aber: Eigentlich haben wir dir schon verschiedene Werkzeuge in die Hand gedrückt.
Könnten wir es nicht so machen,dass wir dir z.B. bis heute abend ein wenig Zeit zum Versuchen und Puzzlen lassen und du dich dann noch mal meldest - sei es mit einer selbst gefundenen Lösung oder aber mit einem Rest-Problem, mit dem du nicht weiterkommst?
Wir verteilen hier lieber Angeln statt fertige Fischstäbchen...
Grüße
Biber
Moin laza.
ja, die FileSystemObject-Methode OpenTextFile kennt einen weiteren (dritten vierten) Parameter für ASCII/Unicode/Systemdefault.
Ich finde den hier relativ übersichtlich beschrieben.
Verbal:
Vierter Parameter von openTextFile
[edit]
Die Methode CreateTextFile kennt als optionalen dritten Parameter TRUE für Unicode, FALSE oder weggelassen für ASCII.
[/edit]
Grüße
Biber
[edit 15.1.] Berichtigt: Bei .OpenTextFile() ist Tristate der vierte und nicht der dritte Parameter. siehe didis Kommentare unten [/edit]
ja, die FileSystemObject-Methode OpenTextFile kennt einen weiteren (
Ich finde den hier relativ übersichtlich beschrieben.
Verbal:
Vierter Parameter von openTextFile
- wenn 0 oder fehlend ---> ASCII
- wenn (-1) --> Unicode
- wenn (-2) --> pokern (Nimm die Systemvoreinstellung, wer immer das sinnvoll glaubt verwenden zu können)
[edit]
Die Methode CreateTextFile kennt als optionalen dritten Parameter TRUE für Unicode, FALSE oder weggelassen für ASCII.
[/edit]
Grüße
Biber
[edit 15.1.] Berichtigt: Bei .OpenTextFile() ist Tristate der vierte und nicht der dritte Parameter. siehe didis Kommentare unten [/edit]
Moin laza86work,
dann kann es ja eigentlich nur so sein, dass diese (bei dir bisher mit Default-Unterstellung "ASCII") gelesenen Dateien in Wirklichkeit als Unicode vorliegen.
WENN das so wäre, dann müsste aber ein explizites Lesen mit "Lies-es-mir-als-Unicode"-Parameter verbunden mit der ebenso expliziten Ansage "Schreib-es-mir-als-ASCII" helfen.
Und das tut nicht, wenn ich dich richtig verstehe?
Grüße
Biber
dann kann es ja eigentlich nur so sein, dass diese (bei dir bisher mit Default-Unterstellung "ASCII") gelesenen Dateien in Wirklichkeit als Unicode vorliegen.
WENN das so wäre, dann müsste aber ein explizites Lesen mit "Lies-es-mir-als-Unicode"-Parameter verbunden mit der ebenso expliziten Ansage "Schreib-es-mir-als-ASCII" helfen.
Und das tut nicht, wenn ich dich richtig verstehe?
Grüße
Biber
Hallo zusammen!
Sorry, bin zur Zeit etwas beschäftigt. Aber wenn ich nicht ganz daneben liege, dann ist Tristate der 4. Parameter:
Ansonsten sieht der Code nicht schlecht aus. Als kleine Anregung, könntest Du die Dateien gleich in ein Array einlesen und dann entsprechend bearbeiten z.B.
Gruß Dieter
Sorry, bin zur Zeit etwas beschäftigt. Aber wenn ich nicht ganz daneben liege, dann ist Tristate der 4. Parameter:
OpenTextFile(FileName As String, [IOMode As IOMode = ForReading], [Create As Boolean = Falsch], [Format As Tristate = TristateFalse]) As TextStream |
Ansonsten sieht der Code nicht schlecht aus. Als kleine Anregung, könntest Du die Dateien gleich in ein Array einlesen und dann entsprechend bearbeiten z.B.
TextLines = Split(objFile.ReadAll, vbCrLf): objFile.Close
For i = 0 To Ubound(TextLines)
If InStr(1, TextLines(i), "Text1", vbTextCompare) .... ' x1 = i
If InStr(1, TextLines(i), "Text2", vbTextCompare) .... ' x2 = i
....
Next
Gruß Dieter
Gueten Morgen laza!
Wobei 0 = False oder TristateFalse (ASCII) und -1 = True oder TristadeTrue (Unicode) entspricht
Gruß Dieter
Aber nun zum OpenTextFiles, ich habe jetzt schon alle Möglichkeiten ausprobiert, ohne Erfolg
So bringt er mir die Fehlermeldung, falsche Anzahl an Argumenten...
Tja, das sind nach meiner Rechnung 5 Parameter (siehe oben Syntax-Zeile) OpenTextFile("Path", ForReading 1, Create True/False, Tristate True/False)So bringt er mir die Fehlermeldung, falsche Anzahl an Argumenten...
Set objFile = objFSO.OpenTextFile("intern.DLR", 1, -1, TRUE, -1)
Wobei 0 = False oder TristateFalse (ASCII) und -1 = True oder TristadeTrue (Unicode) entspricht
Bringt es euch/dir was, wenn ich diese DLR-File mal hochlade?
Schaden kann es jedenfalls nichtGruß Dieter
Hallo laza!
Tja, wer lesen kann ist klar im Vorteil
Gruß Dieter
Tja, wer lesen kann ist klar im Vorteil
Gruß Dieter