Keine Werbeeinblendungen für registrierte User

  ❤ Jede SPENDE hilft unserer Community ❤


  🌹 Danke für Eure Unterstützung 🙏



  📲 Zum Smartphone Forum📱


Texte importieren

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Freitag
Beiträge: 13
Registriert: Mi 10. Dez 2014, 22:16

Texte importieren

Beitrag von Freitag » 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?
mit beträchtlichem Gruß
opensuse 15.2 - NAS

gogo
Beiträge: 960
Registriert: Sa 5. Feb 2011, 19:07

Re: Texte importieren

Beitrag von gogo » Di 6. Apr 2021, 08:14

klar, da Du eine Suse laufen hast würde ich das - je nach Struktur der Dateien - zuerst auf Betriebssystemebene machen. Ich nehme mal an, dass Deine Dateien alle "gleich" aussehen ... sonst wird's kompliziert ;)
Am Allereinfachsten:
Textdatei in ein csv-Format bringen und alle Dateien in eine große Datei schreiben, dann die csv-Datei als Tabelle in Base einbinden - basta

Code: Alles auswählen

cd /Pfad/zu/Meinen/Dateien
cat *.txt > /home/ich/alle_daten.csv
... oder so ähnlich
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Freitag
Beiträge: 13
Registriert: Mi 10. Dez 2014, 22:16

Re: Texte importieren

Beitrag von Freitag » Di 6. Apr 2021, 09:32

Geht leider nicht. Die Texte sind alle verschieden. Es sind kurze Inhaltsangaben. Das csv-Format macht hinter jedem Wort einen Zeilenumbruch.
mit beträchtlichem Gruß
opensuse 15.2 - NAS

gogo
Beiträge: 960
Registriert: Sa 5. Feb 2011, 19:07

Re: Texte importieren

Beitrag von gogo » Di 6. Apr 2021, 11:05

1 Datei = 1 Datensatz?
wie sind die Dateien strukturiert?
gibt es ein Muster, nach dem ein Makro erkennen kann, was wo steht?
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Freitag
Beiträge: 13
Registriert: Mi 10. Dez 2014, 22:16

Re: Texte importieren

Beitrag von Freitag » Di 6. Apr 2021, 11:49

Ich habe hier 2 Beispiele hochgeladen:
Einmal den Tabellenentwurf,
zum Anderen einen Beispieltext.

Wenn man Die Informationen im Text wie "Autor", "Regie" oder "Komponist" noch in ein separates Feld einer Tabelle bekäme, wäre es noch schöner. Die Beziehungen der Tabelle zu einer Anderen werden über den Namen der Textdatei hergestellt.
Dateianhänge
Beispieltext.png
Beispieltext.png (133.22 KiB) 235 mal betrachtet
Tabellenentwurf.png
Tabellenentwurf.png (30.66 KiB) 235 mal betrachtet
mit beträchtlichem Gruß
opensuse 15.2 - NAS

gogo
Beiträge: 960
Registriert: Sa 5. Feb 2011, 19:07

Re: Texte importieren

Beitrag von gogo » Di 6. Apr 2021, 16:40

etwa so ... logischerweise ungetestet und vermutlich kommen dutzende Fehlermeldungen ... aber da musst Du durch ;)

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
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Antworten