Mehrere Dateien laden und eine Tabelle aus diesen in neuen Dateien übergeben
Hallo zusammen,
folgendes Problem habe ich und hoffentlich könnt Ihr mir helfen.
Ich habe ca. 500 Textdateien von unserer Website in einem Ordner exportiert. Die Dateien haben völlig unterschiedliche Dateinamen. Nun ist es so, dass der gesamte HTML-Code mit übernommen wurden und sich in den Export-Einstellungen nichts anpassen lässt. Die Datei besteht aus Text und einer einzigen Tabelle die benötigt wird.
Als Beispiel
<!DOCTYPE html>
<html lang="DE">
<head>
<meta content="text/html;
...
<table ....
...Daten...
...Daten...
</table>
In den Dateien kommt das <table>/</table> nur ein mal vor. Gibt es eine Möglichkeit per Batch oder einem Freeware-Tool den Teil zwischen <table> und </table> automatisiert auszulesen und in einzelne Textdateien schreiben zu lassen?
Schon mal vielen Dank für Eure Hilfe!
folgendes Problem habe ich und hoffentlich könnt Ihr mir helfen.
Ich habe ca. 500 Textdateien von unserer Website in einem Ordner exportiert. Die Dateien haben völlig unterschiedliche Dateinamen. Nun ist es so, dass der gesamte HTML-Code mit übernommen wurden und sich in den Export-Einstellungen nichts anpassen lässt. Die Datei besteht aus Text und einer einzigen Tabelle die benötigt wird.
Als Beispiel
<!DOCTYPE html>
<html lang="DE">
<head>
<meta content="text/html;
...
<table ....
...Daten...
...Daten...
</table>
In den Dateien kommt das <table>/</table> nur ein mal vor. Gibt es eine Möglichkeit per Batch oder einem Freeware-Tool den Teil zwischen <table> und </table> automatisiert auszulesen und in einzelne Textdateien schreiben zu lassen?
Schon mal vielen Dank für Eure Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 220912
Url: https://administrator.de/contentid/220912
Ausgedruckt am: 17.11.2024 um 17:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo Jaeger1983, willkommen im Forum.
Batch ist technisch ungeeignet um HTML Quelltext zu verarbeiten. Batch arbeitet Textdateien zeilenweise ab, wobei die Stringlänge auf 8191 Zeichen beschränkt ist. HTML braucht grundsätzlich gar keinen Zeilenumbruch und könnte theoretisch in einer einzigen Zeile mit unbestimmter Länge vorliegen.
Dein Vorhaben ließe sich mit einem Script umsetzen, das Reguläre Ausdrücke unterstützt. Dazu fehlt aber einiges an Zusatzinformationen.
Grüße
rubberman
Batch ist technisch ungeeignet um HTML Quelltext zu verarbeiten. Batch arbeitet Textdateien zeilenweise ab, wobei die Stringlänge auf 8191 Zeichen beschränkt ist. HTML braucht grundsätzlich gar keinen Zeilenumbruch und könnte theoretisch in einer einzigen Zeile mit unbestimmter Länge vorliegen.
Dein Vorhaben ließe sich mit einem Script umsetzen, das Reguläre Ausdrücke unterstützt. Dazu fehlt aber einiges an Zusatzinformationen.
- Liegen alle Dateien im selben Verzeichnis?
- Haben sie alle die gleiche Dateiendung und wenn ja, welche (oder wie sonst sollen die zu verarbeitenden Dateien identifiziert werden)?
- Sind die table-Tags selbst Bestandteil der benötigten Daten, oder nur der HTML Text, der in sie eingeschlossen ist?
- Sollen die ausgelesenen Daten in die gleichen Dateien zurückgeschrieben werden oder in andere Dateien (falls in andere, wohin und mit welcher Nomenklatur)?
Grüße
rubberman
Zitat von @Jaeger1983:
Danke für die schnellen Antworten!
rubberman:
- die Daten liegen in einem Verzeichnis
- gleiche Dateiendung .html
- die Table Tags sind selbst Bestandteil
- in eine andere Datei, html wäre vollkommen in Ordnung
certifiedit:
Leider nein, wenn ich die Daten habe, dann kommen diese aber direkt in eine DB, damit ich nicht irgendwann wieder vor diesem
Problem stehe.
Gruß
Jaeger1983
Danke für die schnellen Antworten!
rubberman:
- die Daten liegen in einem Verzeichnis
- gleiche Dateiendung .html
- die Table Tags sind selbst Bestandteil
- in eine andere Datei, html wäre vollkommen in Ordnung
certifiedit:
Leider nein, wenn ich die Daten habe, dann kommen diese aber direkt in eine DB, damit ich nicht irgendwann wieder vor diesem
Problem stehe.
Gruß
Jaeger1983
OK, aber warum wird man hier wegen einer Anmerkung herunter bewertet, die dir ggf. enorm Zeit gespart hätte?
@certifiedit
Ich war's auch nicht, ich fand die Frage durchaus gerechtfertigt.
@Jaeger1983
Bin auf Arbeit und habe nicht die Zeit das jetzt zu erledigen. Wenn's ordentlich werden soll, werde ich das heute Abend schreiben. Ist kein riesiger Aufwand ...
Nur noch eine Rückfrage: Soll alles in eine Datei oder für jede Tabelle eine neue?
Grüße
rubberman
Ich war's auch nicht, ich fand die Frage durchaus gerechtfertigt.
@Jaeger1983
Bin auf Arbeit und habe nicht die Zeit das jetzt zu erledigen. Wenn's ordentlich werden soll, werde ich das heute Abend schreiben. Ist kein riesiger Aufwand ...
Nur noch eine Rückfrage: Soll alles in eine Datei oder für jede Tabelle eine neue?
Grüße
rubberman
Hi, hier das Beispiel einer Lösung mit sed for Windows.
Wenn die Tabellentags mit übertragen werden sollen:
und ohne Tags:
lg.
Wenn die Tabellentags mit übertragen werden sollen:
sed -ni.bak "/<table/,/<\/table/p" *.html
sed -ni.bak "/<table/,/<\/table/{//!p}" *.html
Hallo Jaeger1983,
Einzeiler wie Endoro kann ich nicht bieten. Wenn es ohne 3rd-Party-Tool sein soll, hätte ich hier ein VBScript:
*.vbs
strFolder anpassen und los gehts.
Grüße
rubberman
Einzeiler wie Endoro kann ich nicht bieten. Wenn es ohne 3rd-Party-Tool sein soll, hätte ich hier ein VBScript:
*.vbs
Option Explicit
Const strFolder = "C:\pfad\zu\dateien"
Const strPrefix = "Table_"
Const ForReading = 1
Const ForWriting = 2
Dim objFSO, objFolder, objFile, objFileNew, objStream, objRegEx, colMatches
Dim strContent, strFileNew
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFolder)
Set objRegEx = New RegExp
objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.Pattern = "<table>.*\s*</table>"
For Each objFile In objFolder.Files
If StrComp(objFSO.GetExtensionName(objFile.Name), "html", vbTextCompare) = 0 _
And objFile.Size > 0 _
And Left(objFile.Name, Len(strPrefix)) <> strPrefix Then
Set objStream = objFile.OpenAsTextStream(ForReading)
strContent = objStream.ReadAll
objStream.Close
If objRegEx.Test(strContent) Then
Set colMatches = objRegEx.Execute(strContent)
strFileNew = objFSO.BuildPath(strFolder, strPrefix & objFile.Name)
Set objFileNew = objFSO.OpenTextFile(strFileNew, ForWriting, True)
objFileNew.Write colMatches(0)
objFileNew.Close
End If
End If
Next
Grüße
rubberman
Hallo Jaeger1983,
als hätte ich den Braten nicht bereits im Vorfeld gerochen
Grüße
rubberman
als hätte ich den Braten nicht bereits im Vorfeld gerochen
Option Explicit
Const strFolder = "C:\pfad\zu\dateien"
Const strPrefix = "Table_"
Const ForReading = 1
Const ForWriting = 2
Dim objFSO, objRegEx
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objRegEx = New RegExp
objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.Pattern = "<table.*\s*</table>"
ProcessFiles strFolder
Sub ProcessFiles(strPath)
Dim objFolder, objSubFolder, objFile, objFileNew, objStream, colMatches
Dim strContent, strFileNew
Set objFolder = objFSO.GetFolder(strPath)
For Each objSubFolder In objFolder.SubFolders
ProcessFiles objSubFolder.Path
Next
For Each objFile In objFolder.Files
If StrComp(objFSO.GetExtensionName(objFile.Name), "html", vbTextCompare) = 0 _
And objFile.Size > 0 _
And Left(objFile.Name, Len(strPrefix)) <> strPrefix Then
Set objStream = objFile.OpenAsTextStream(ForReading)
strContent = objStream.ReadAll
objStream.Close
If objRegEx.Test(strContent) Then
Set colMatches = objRegEx.Execute(strContent)
strFileNew = objFSO.BuildPath(strPath, strPrefix & objFile.Name)
Set objFileNew = objFSO.OpenTextFile(strFileNew, ForWriting, True)
objFileNew.Write colMatches(0)
objFileNew.Close
End If
End If
Next
End Sub
rubberman
Das ist unmöglich von hier aus zu sagen. Ich kenne den Inhalt deiner HTML Dateien nicht. Deine ursprüngliche Aussage war
Analysiere erst mal deine Dateien ...
Grüße
rubberman
Die Datei besteht aus Text und einer einzigen Tabelle die benötigt wird.
Sind es nun mehrere Tabellen, zwischen denen sich ein Script befindet?Analysiere erst mal deine Dateien ...
Grüße
rubberman