Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mehrere Dateien laden und eine Tabelle aus diesen in neuen Dateien übergeben

Frage Entwicklung Batch & Shell

Mitglied: Jaeger1983

Jaeger1983 (Level 1) - Jetzt verbinden

01.11.2013, aktualisiert 00:15 Uhr, 1813 Aufrufe, 15 Kommentare, 5 Danke

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!
Mitglied: rubberman
01.11.2013, aktualisiert um 01:16 Uhr
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.
  • 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
Bitte warten ..
Mitglied: certifiedit.net
01.11.2013 um 01:26 Uhr
Ich würde das gerne Ergänzen: Wie ist die bisherige Site aufgebaut? besteht ggf. die Möglichkeit die Daten direkt aus einer DB (MYSQL?) heraus zu ziehen?
Bitte warten ..
Mitglied: Jaeger1983
01.11.2013 um 09:40 Uhr
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
Bitte warten ..
Mitglied: certifiedit.net
01.11.2013 um 10:28 Uhr
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

OK, aber warum wird man hier wegen einer Anmerkung herunter bewertet, die dir ggf. enorm Zeit gespart hätte?
Bitte warten ..
Mitglied: Jaeger1983
01.11.2013, aktualisiert um 10:36 Uhr
Zitat von certifiedit.net:
> Zitat von Jaeger1983:
> ----

OK, aber warum wird man hier wegen einer Anmerkung herunter bewertet, die dir ggf. enorm Zeit gespart hätte?

Kann ich Dir nicht beantworten.
Bitte warten ..
Mitglied: rubberman
01.11.2013, aktualisiert um 10:51 Uhr
@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
Bitte warten ..
Mitglied: Jaeger1983
01.11.2013 um 11:26 Uhr
Danke rubberman, es wäre schön, wenn ich pro Tabelle eine Datei hätte.
Bitte warten ..
Mitglied: Endoro
01.11.2013 um 15:32 Uhr
Hi, hier das Beispiel einer Lösung mit sed for Windows.
Wenn die Tabellentags mit übertragen werden sollen:
01.
sed -ni.bak "/<table/,/<\/table/p" *.html
und ohne Tags:
01.
sed -ni.bak "/<table/,/<\/table/{//!p}" *.html
lg.
Bitte warten ..
Mitglied: rubberman
01.11.2013 um 15:53 Uhr
Hallo Jaeger1983,

Einzeiler wie Endoro kann ich nicht bieten. Wenn es ohne 3rd-Party-Tool sein soll, hätte ich hier ein VBScript:

*.vbs
01.
Option Explicit 
02.
 
03.
Const strFolder = "C:\pfad\zu\dateien" 
04.
Const strPrefix = "Table_" 
05.
 
06.
Const ForReading = 1 
07.
Const ForWriting = 2 
08.
Dim objFSO, objFolder, objFile, objFileNew, objStream, objRegEx, colMatches 
09.
Dim strContent, strFileNew 
10.
 
11.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
12.
Set objFolder = objFSO.GetFolder(strFolder) 
13.
Set objRegEx = New RegExp 
14.
objRegEx.Global = True 
15.
objRegEx.IgnoreCase = True 
16.
objRegEx.Pattern = "<table>.*\s*</table>" 
17.
 
18.
 
19.
For Each objFile In objFolder.Files 
20.
  If StrComp(objFSO.GetExtensionName(objFile.Name), "html", vbTextCompare) = 0 _ 
21.
   And objFile.Size > 0 _ 
22.
   And Left(objFile.Name, Len(strPrefix)) <> strPrefix Then 
23.
    Set objStream = objFile.OpenAsTextStream(ForReading) 
24.
    strContent = objStream.ReadAll 
25.
    objStream.Close 
26.
    If objRegEx.Test(strContent) Then 
27.
      Set colMatches = objRegEx.Execute(strContent) 
28.
      strFileNew = objFSO.BuildPath(strFolder, strPrefix & objFile.Name) 
29.
      Set objFileNew = objFSO.OpenTextFile(strFileNew, ForWriting, True) 
30.
      objFileNew.Write colMatches(0) 
31.
      objFileNew.Close 
32.
    End If 
33.
  End If 
34.
Next
strFolder anpassen und los gehts.

Grüße
rubberman
Bitte warten ..
Mitglied: Jaeger1983
01.11.2013 um 20:49 Uhr
Hallo rubberman,

vielen vielen Dank für die schnelle Hilfe!

Die 500 Dateien sind fertig. Nun habe ich festgestellt, dass es weitere 2000 Dateien in einer Ordnerstruktur gibt. Bei den weiteren Dateien ist das Problem, dass der Beginn der Tabelle mit <table width="100%" ....> beginnt.

Gibt es die Möglichkeit, dass das gesamte Verzeichnis durchsucht wird und die Dateien am "Fundort" abgelegt werden.

Sorry, bin durch Zufall an die Daten gekommen
Bitte warten ..
Mitglied: rubberman
01.11.2013, aktualisiert um 21:55 Uhr
Hallo Jaeger1983,

als hätte ich den Braten nicht bereits im Vorfeld gerochen
01.
Option Explicit 
02.
 
03.
Const strFolder = "C:\pfad\zu\dateien" 
04.
Const strPrefix = "Table_" 
05.
 
06.
Const ForReading = 1 
07.
Const ForWriting = 2 
08.
Dim objFSO, objRegEx 
09.
 
10.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
11.
Set objRegEx = New RegExp 
12.
objRegEx.Global = True 
13.
objRegEx.IgnoreCase = True 
14.
objRegEx.Pattern = "<table.*\s*</table>" 
15.
ProcessFiles strFolder 
16.
 
17.
Sub ProcessFiles(strPath) 
18.
  Dim objFolder, objSubFolder, objFile, objFileNew, objStream, colMatches 
19.
  Dim strContent, strFileNew 
20.
  Set objFolder = objFSO.GetFolder(strPath) 
21.
  For Each objSubFolder In objFolder.SubFolders 
22.
    ProcessFiles objSubFolder.Path 
23.
  Next 
24.
  For Each objFile In objFolder.Files 
25.
    If StrComp(objFSO.GetExtensionName(objFile.Name), "html", vbTextCompare) = 0 _ 
26.
     And objFile.Size > 0 _ 
27.
     And Left(objFile.Name, Len(strPrefix)) <> strPrefix Then 
28.
      Set objStream = objFile.OpenAsTextStream(ForReading) 
29.
      strContent = objStream.ReadAll 
30.
      objStream.Close 
31.
      If objRegEx.Test(strContent) Then 
32.
        Set colMatches = objRegEx.Execute(strContent) 
33.
        strFileNew = objFSO.BuildPath(strPath, strPrefix & objFile.Name) 
34.
        Set objFileNew = objFSO.OpenTextFile(strFileNew, ForWriting, True) 
35.
        objFileNew.Write colMatches(0) 
36.
        objFileNew.Close 
37.
      End If 
38.
    End If 
39.
  Next 
40.
End Sub
Grüße
rubberman
Bitte warten ..
Mitglied: Jaeger1983
01.11.2013 um 22:43 Uhr
Hallo rubberman,

danke für die schnelle Rückmeldung.

Ich habe jetzt mit diesen alten Daten mal getestet. Hier funktionieren beide Varianten nicht. Kann das mit dem Code zusammenhängen der zwischen <table... und </table> steht? Bei den 500 war rein nur <table ...> Daten </table>. Bei den 2000 ist da noch nen Script mit drin.
Bitte warten ..
Mitglied: rubberman
01.11.2013 um 23:15 Uhr
Das ist unmöglich von hier aus zu sagen. Ich kenne den Inhalt deiner HTML Dateien nicht. Deine ursprüngliche Aussage war
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
Bitte warten ..
Mitglied: rubberman
02.11.2013 um 00:11 Uhr
Ups, wo ist denn deine Antwort von eben hin

Egal, teste mal mit folgendem Pattern:
objRegEx.Pattern = "<table[\s\S]*?</table>"
Grüße
rubberman
Bitte warten ..
Mitglied: Jaeger1983
02.11.2013 um 00:16 Uhr
Hallo rubberman,

vielen Dank! Jetzt funktioniert es, 1000 Dank!

Gruß
Jaeger1983
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Linux Tools
CURL mehrere Dateien vom ftp-Server herunterladen (10)

Frage von highpriest zum Thema Linux Tools ...

Windows 7
gelöst Mehrere Dateien in Windows umbenennen mit Batchjob (4)

Frage von Jeduja zum Thema Windows 7 ...

Microsoft Office
Excel VBA "SVERWEIS" über mehrere Dateien in Ordner (2)

Frage von Acht85 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...