eine Zeile einer *.txt auslesen und übernehmen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

eine Zeile einer *.txt auslesen und übernehmen

Beitrag von clag »

Hallo Leutz und vor allem die Basic-könner davon :lol:

ich habe öfter Tabellen mit einer Spalte in der bis zu 150 Namen von *.txt Dateien stehen
nun möchte aus jeder der gelisteten *.txt die 3. Zeile dieser Datei in eine Zelle der Spalte bekommen/kopieren in der auch der Name steht

ist das schmerzfrei möglich, und kann mir jemand dabei ganz konkret helfen/zeigen/vormachen ??

bütte bütte :roll:
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von Karolus »

Hallo
Kopiere die Namen in eine einfache Textdatei mit z.B. dem Namen 'referenz.txt' und führe in einer Shell*** folgendes Kommando aus:

Code: Alles auswählen

for i in $(cat referenz.txt) ; do sed -n -e '3p' < $i >> output.txt ; done
Kopiere den Inhalt der Datei 'output.txt' in eine Spalte deiner Calcdatei.

***eine Shell hat vmtl. jedes Linux-system, auf Windows google dazu nach 'Cygwin'

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von clag »

Hallo Karo,

das schaut auf den ersten Blick gut aus

allerdings kenne ich CygWin noch nicht und ich muss mich da erst mal ein bisschen schlau machen !
oder kann ich das ohne Bedenken und Nebenwirkung auf einen XP Rechner installieren ?

von daher dauert es mit meiner Erfolgsmeldung vielleicht noch etwas.....

Danke
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von Karolus »

Hallo
...oder kann ich das ohne Bedenken und Nebenwirkung auf einen XP Rechner installieren ?
Mit den falschen Kommandos kannst du via Cygwin einiges kaputt machen, aber du musst es selbst eingeben, bei Outlook und IE machen das andere für dich... 8)

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von Karolus »

Hallo
Ich habs mal als Basic-function geschrieben, musst du in Calc nur noch mit:

Code: Alles auswählen

=DRITTE_ZEILE(A1)
aufrufen.

Code: Alles auswählen

function dritte_zeile( pfad as string) as string
	dim zeile3 as String
        pfad = convertfromurl( pfad )
if FileExists(pfad) then
	fn = freefile
	Open pfad for Input Access Read as #fn
	for dummy = 0 to 2
		line input #fn, zeile3
	next 
	close #fn
	dritte_zeile = zeile3
else
	dritte_zeile ="##Fehler##"
end if
End function
Gruß Karo
Zuletzt geändert von Karolus am Sa, 05.06.2010 07:53, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von clag »

Hallo Karo,

das! sieht genial aus, so als Funktion

jetzt muss ich aber gleich zweimal ganz blöd fragen

1. wohin muss ich den Code schreiben/speichern ?
2. wenn in A1 nur der Dateiname steht welchen Pfad würde die Funktion annehmen ?


edit
1. habe ich schon raus gekriegt (habe den Code einfach zu den Makros geschrieben ohne Sub)
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von Karolus »

Hallo

1. Vorzugsweise Copy & paste nach →Extras→Makros→Makros verwalten→OOobasic →+Meine Makros→+Standard→Module1→'Bearbeiten'

2.Du musst schon irgendwie den ganzen Pfad übergeben, das kannst du in Calc zusammenbauen mit:

Code: Alles auswählen

=DRITTE_ZEILE("c:\blubb\bla\"&A1)
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von clag »

Hallo Karo

die Funktion, funktioniert........ super :D

und erleichtert mir die Arbeit nun erheblich vor allem in Zusammenarbeit mit der Filterformel die du mir vor ein paar schon Tagen gezaubert hast

also ein fettes DANKE dafür


noch mal nach gefragt, ohne Pfad würde die Funktion die txt Datei wo erwarten im selben Ordner wie die Calc Datei die die Funktion enthält ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von DPunch »

Aloha
clag hat geschrieben:noch mal nach gefragt, ohne Pfad würde die Funktion die txt Datei wo erwarten im selben Ordner wie die Calc Datei die die Funktion enthält ?
Nein, dann würde die Funktion die Datei schlichtweg nicht finden, weil es den nur aus dem Dateinamen bestehenden Pfad natürlich nicht geben kann.
Wenn Du den Basispfad zu diesen Dateien von Vornherein kennst und dieser sich auch nicht ändert, kannst Du ihn auch direkt im Makro-Code unterbringen, wenn Dir das lieber ist.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von clag »

Hallo DPunch

danke für die Erklärung
ich meinte mich aus vergangenen Excel 4/5 Zeiten entsinnen zu können das Excel so etwas wie einen relativen Pfad kannte !?
also bei Calc dann immer den absoluten Pfad angeben ...
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von DPunch »

Aloha

Du musst bedenken, dass die Datei(en) *nur* auf Basis eines Makros geöffnet wird(werden).
Dass diese Funktion auf einen Dateinamen überhaupt reagiert, beruht einzig und allein darauf, das Karo die Funktion dafür geschrieben hat - das Makro an sich (ob jetzt Excel oder Calc) ist logischerweise nur so klug wie der Input es zulässt.
Auch dieses Makro würde sich problemlos so stricken lassen, dass es bei Bedarf auf relative Pfade reagiert, aber es ist und bleibt ein Makro.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von clag »

Moin DPunch

nochmal Danke für deine späte Schreibaktivität und Aufklärungsarbeit :D
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von Karolus »

Hallo
Ich hab oben in der function noch eine Zeile 'pfad = convertfromurl( pfad )' eingebaut, dann kannst du dir in Calc den relativen Pfad zum Dokumentenverzeichnis erzeugen mit:

Code: Alles auswählen

=WECHSELN(LINKS(ZELLE("Filename");SUCHEN("/[^/]*$";ZELLE("Filename")));"'";"")
Damit plus dem Dateinamen kannst du DRITTE_ZEILE() füttern.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von clag »

Hi Karo

dir auch noch ein Danke für die Option "relativer Pfad" :D
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: eine Zeile einer *.txt auslesen und übernehmen

Beitrag von clag »

Hi Karo, Hi DPunch
und alle anderen Leser natürlisch auch :D

habe doch noch eine Frage,
kann man das noch irgendwie so hinbiegen, das im/für "Filename" ein * eingesetzt werden kann
also im Extremfall ein "*.txt" wenn in jedem angegebenen Pfad nur eine *.txt vorkommt, aber in jedem Pfad eine andere *.txt ?

dann könnte ich nämlich noch ein paar Arbeitsschritte einsparen :)
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten