Dateien eines Ordners auslesen und in eine HTML-Datei schreiben
Hallo Freunde,
wieder einmal stehe ich mit meinen Nano-Programmierkenntnissen auf dem Schlauch und würde mich über Hilfe sehr freuen.
Und zwar möchte ich mit einem Script aus allen db-Dateien (Extension .db) eines Ordners Strings extrahieren, die immer an der gleichen Position (Dateianfang) der Binärdateien positioniert sind. Diese Strings sollen dann zeilenweise in eine Galeriedatei für jeden Ordner geschrieben werden (HTML-Format).
Der zeilenweise Satzaufbau innerhalb dieser HTML-Datei sollte recht einfach sein: Thumbnail mit Link zur Originalbilddatei | Name der Trägerdatei mit Link zur Originalbilddatei. Die Trägerdatei ist die oben erwähnte Binärdatei mit Angabe des Thumbnail-Links, der Link des Originalbildes wird aus dem Thumbnail-Link gebildet.
Ich habe zwei Scripte zusammengebastelt, aber die sind in Visual Basic. Ich besitze kein Visual Basic, muß das Script also aus dem Microsoft Office (2003) als VBA-Anwendung starten. Den Pfad der Trägerdatei gebe ich über eine Inputbox ein und erhalte auch das gewünschte Ergebnis, aber für fast 100 Dateien pro Ordner ist das doch sehr mühselig und ich suche nach einer Automatisation.
Hier nun der Code:
Mein Anliegen wäre also:
Mike
wieder einmal stehe ich mit meinen Nano-Programmierkenntnissen auf dem Schlauch und würde mich über Hilfe sehr freuen.
Und zwar möchte ich mit einem Script aus allen db-Dateien (Extension .db) eines Ordners Strings extrahieren, die immer an der gleichen Position (Dateianfang) der Binärdateien positioniert sind. Diese Strings sollen dann zeilenweise in eine Galeriedatei für jeden Ordner geschrieben werden (HTML-Format).
Der zeilenweise Satzaufbau innerhalb dieser HTML-Datei sollte recht einfach sein: Thumbnail mit Link zur Originalbilddatei | Name der Trägerdatei mit Link zur Originalbilddatei. Die Trägerdatei ist die oben erwähnte Binärdatei mit Angabe des Thumbnail-Links, der Link des Originalbildes wird aus dem Thumbnail-Link gebildet.
Ich habe zwei Scripte zusammengebastelt, aber die sind in Visual Basic. Ich besitze kein Visual Basic, muß das Script also aus dem Microsoft Office (2003) als VBA-Anwendung starten. Den Pfad der Trägerdatei gebe ich über eine Inputbox ein und erhalte auch das gewünschte Ergebnis, aber für fast 100 Dateien pro Ordner ist das doch sehr mühselig und ich suche nach einer Automatisation.
Hier nun der Code:
Sub Extraktor()
Dateiname = InputBox("Geben Sie den Dateinamen - mit Pfad - an")
sBuffer = FileRead(Dateiname)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(Dateiname & ".html")
sBuffer = FileRead(Dateiname, 13, 111) ' Thumbnailbild
lBuffer = Left(sBuffer, 99) & ".jpg" ' Originalbild
objFile.Write "<html>" & vbCrLf & "<a href=" & lBuffer & ">" & "<img src=" & sBuffer & "><br>" & Dateiname & "<br></img></a><br>" & vbCrLf
' Erstellt folgende HTML-Zeile: <a href=Originalbild.jpg><img src=Thumbnailbild><br>Trägerdateiname<br></img></a><br>
objFile.Write "</html>"
MsgBox sBuffer
objFile.Close
End Sub
Function FileRead(ByVal sFile As String, _
Optional ByVal nStartPos As Long = 1, _
Optional ByVal nBytesToRead As Long = 0) As String
' (C) Dietmar Otter | vbarchiv.net
Dim F As Integer
Dim nFileLen As Long
Dim sBuffer As String
' Datei im Binary-Mode öffnen
F = FreeFile
Open sFile For Binary As #F
' Dateigröße in Bytes
nFileLen = LOF(F)
' Falls "BytesToRead" nicht angegeben oder 0,
' gesamten Inhalt ab "StartPos" auslesen
If nBytesToRead = 0 Then nBytesToRead = nFileLen
' Falls StartPos < 1, Bytes rückwärts vom
' Dateiende auslesen
If nStartPos < 1 Then
nStartPos = nFileLen
nBytesToRead = -Abs(nBytesToRead)
End If
' Falls "StartPos" > Dateigröße und
' "BytesToRead" < 0, Funktion beenden
If nStartPos > nFileLen And nBytesToRead < 0 Then
Close #F
Exit Function
End If
' Leseposition ermitteln
If nBytesToRead < 1 Then
nBytesToRead = Abs(nBytesToRead)
nStartPos = nStartPos - nBytesToRead + 1
If nStartPos < 1 Then
nBytesToRead = nBytesToRead - Abs(nStartPos) - 1
nStartPos = 1
End If
End If
If nStartPos + nBytesToRead - 1 > nFileLen Then
nBytesToRead = nFileLen - nStartPos + 1
End If
' Inhalt auslesen
sBuffer = Space$(nBytesToRead)
Seek #F, nStartPos
Get #F, , sBuffer
' Datei schließen
Close #F
FileRead = sBuffer
End Function
Mein Anliegen wäre also:
- Durchlaufen der Extraktor-Schleife für alle *.db-Trägerdateien (Endung db) im jeweiligen Ordner.
- Portierung des Codes zu Visual Basic Script (VBS), um nicht immer über das MS Office starten zu müssen.
Mike
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 214981
Url: https://administrator.de/forum/dateien-eines-ordners-auslesen-und-in-eine-html-datei-schreiben-214981.html
Ausgedruckt am: 06.01.2025 um 23:01 Uhr
14 Kommentare
Neuester Kommentar
Hallo Gurkenhobel!
Die Schleife sollte keine große Sache sein - ungetestet etwa so:
Hinsichtlich der Portierung: VBS unterstützt nativ keine Binär-Dateien - Workarounds gibt es aber (zB von hier) gezeigt ...
Grüße
bastla
Ich besitze kein Visual Basic
Das besitzt Microsoft - eine Lizenz könntest Du aber bekommen: http://www.microsoft.com/visualstudio/eng/downloads#d-2012-expressDie Schleife sollte keine große Sache sein - ungetestet etwa so:
Sub Extraktor()
Pfad = "D:\Dein Pfad"
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each Dateiname In objFSO.GetFolder(Pfad).Files
sBuffer = FileRead(Dateiname)
Set objFile = objFSO.CreateTextFile(Dateiname & ".html")
sBuffer = FileRead(Dateiname, 13, 111) ' Thumbnailbild
lBuffer = Left(sBuffer, 99) & ".jpg" ' Originalbild
objFile.Write "<html>" & vbCrLf & "<a href=" & lBuffer & ">" & "<img src=" & sBuffer & "><br>" & Dateiname & "<br></img></a><br>" & vbCrLf
' Erstellt folgende HTML-Zeile: <a href=Originalbild.jpg><img src=Thumbnailbild><br>Trägerdateiname<br></img></a><br>
objFile.Write "</html>"
MsgBox sBuffer
objFile.Close
Next
End Sub
Grüße
bastla
Hallo Gurkenhobel!
Grüße
bastla
Schade, daß man nicht portieren kann
Hast Du Dir denn den oben verlinkten Beitrag angesehen?Grüße
bastla
Hallo Gurkenhobel!
verwenden ...
Dateiname (ohne Extension) und Extension bekommst Du übrigens so:
Grüße
bastla
wie man das Ganze automatisiert für jeden Ordner erledigen kann
... ist im Prinzip oben schon gezeigt - wenn Du nicht das jeweilige Datei-Objekt, sondern dessen Pfad benötigst, kannst Du jaFor Each Datei In objFSO.GetFolder(Pfad).Files
TestFile = Datei.Path
Dateiname (ohne Extension) und Extension bekommst Du übrigens so:
TestFileName = objFSO.GetBaseName(Datei.Path)
TestFileExt = objFSO.GetExtensionName(Datei.Path)
bastla
Hallo Gurkenhobel!
Grüße
bastla
Wie kommen nun alle Dateinamen in eine Liste (Indexdatei)
Indem Du sie hineinschreiben lässt? Wenn Du die Indexdatei vor der Schleife als Objekt erstellst (wie das syntaktisch geht, findest Du ja schon ganz oben in Zeile 5 Deines eigenen Entwurfs), kannst Du sie innerhalb der Schleife mit den entsprechenden Zeilen befüllen (analog zur Zeile 8) ...Grüße
bastla
Hallo Gurkenhobel!
Das Schreiben mittels "FileSystemObject" ist für reine Textdateien gedacht - so hätte ich auch Deine Absicht
Grüße
bastla
Das Schreiben mittels "FileSystemObject" ist für reine Textdateien gedacht - so hätte ich auch Deine Absicht
Diese Strings sollen dann zeilenweise in eine Galeriedatei für jeden Ordner geschrieben werden (HTML-Format).
(als zusätzliche Dateiliste) interpretiert; ansonsten musst Du natürlich bei der Binärdatei-Variante bleiben und versuchen, Deine Textbestandteile vor dem Schreiben passend in die Variable "BinArray" einzubauen ...Grüße
bastla