Texte importieren
Verfasst: Mo 5. Apr 2021, 20:51
Ich habe ca. 5000 Textdateien. Deren Inhalte möchte ich in eine Tabelle einer Datenbank importieren. Kann man das in einem Rutsch machen?
Das Online-Forum rund um das LibreOffice Softwarepaket
https://www.libreoffice-forum.de/
Code: Alles auswählen
cd /Pfad/zu/Meinen/Dateien
cat *.txt > /home/ich/alle_daten.csv
Code: Alles auswählen
sub import_viele_dateien
dim sDatei
sDatei=DIR("/home/freitag/Daten/*",0)
while sDatei <> ""
if sDatei <> "." and sDatei <> ".." then
aDatensatz = DateiLesen("/home/freitag/Daten/" & sDatei)
' aDatensatz enthält ein Array nach folgendem Muster:
' (0) = Titel
' (1) = Autoren
' (2) = Prduktion
' (3) = Regie
' (4) = Musik
' (5) = Inhalt als ggf. mehrzeiliger Text
' (6) = Mitwirkende als direkt SQL-taugliches Statement: Insert into tMitwirkende (ID_Mitwirkende, Werk, Kuenstler, Rolle) values (NULL, 'WerkXYZ', 'Künstler1', 'Rolle1') (NULL, 'Filmname', 'Künstler2', 'Rolle2') (NULL, 'Filmname', 'Künstler3', 'Rolle3') etc.
' (7) = Daten des Werks in direkt SQL-tauglicher Form...
' das Array kann jetzt mit einer SQL-Anweisung eingelesen werden - vorzugswiese in 2 Tabellen: 1x Werk, 1x Mitwirkende .... oder wie auch immer
' besser: einfach die 2 Statements in (6) und (7) ausführen...
end if
sDatei=DIR
wend
end sub
function DateiLesen(Dateiname)
dim DS(7)
i = Freefile
sModus="###NEU###"
open Dateiname For Input As i
while NOT EOF(i)
line input #i, sLine
if sLine <>"" then
if isempty(DS(0)) then
DS(0)=sLine
else
if sModus="###NEU###" then
aL=split(sLine, CHR(9))
if aL(0) = "Autor(en):" then
DS(1) = aL(1)
elseif aL(0) = "Produktion:" then
DS(2) = aL(1)
elseif aL(0) = "Regisseur(e):" then
DS(3) = aL(1)
elseif aL(0) = "Komponist(en):" then
DS(4) = aL(1)
elseif aL(0) = "Mitwirkende:" then
sModus = "###MITWIRKENDE###"
'DS(6) = aL(1) - Zeile ohne Daten => wird verworfen
elseif aL(0) = "Inhaltsangabe:" then
sModus="###INHALT###"
DS(5) = aL(1)
elseif sModus = "###MITWIRKENDE###" then
DS(6) = DS(6) & " (NULL, '" & DS(0) & "', '" & split(sLine, CHR(9))(0) & "', '" & split(sLine, CHR(9))(1) & "') "
elseif sModus="###INHALT###" then
aL=split(sLine, CHR(9))
if len(aL) = 2 then
if aL(0) = "Mitwirkende:" then
sModus = "###MITWIRKENDE###"
else
msgbox(DS(1) & ": hier sollten Daten zum Inhalt oder zu den Mitwirkenden stehen! Bitte per Hand korrigieren. Die Problematische Zeile ist:" & chr(10) & sLine)
end if
else
DS(5) = DS(5) & chr(10) & aL(0)
end if
end if
end if
end if
end if
wend
close #i
DS(6) = "Insert into tMitwirkende (ID_Mitwirkende, Werk, Kuenstler, Rolle) values " & DS(6)
DS(7) = "Insert into tWerke (ID_Werke, Werk, Autor, Produktion, Regie, Musik, Inhalt) values (NULL, '" & DS(0) & "', '" & DS(1) & "', '" & DS(2) & "', '" & DS(3) & "', '" & DS(4) & "', '" & DS(5) & "')"
DateiLesen=DS
end function