Seite 1 von 2

eine Zeile einer *.txt auslesen und übernehmen

Verfasst: Fr, 04.06.2010 11:32
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:

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

Verfasst: Fr, 04.06.2010 15:36
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

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

Verfasst: Fr, 04.06.2010 16:11
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

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

Verfasst: Fr, 04.06.2010 16:44
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

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

Verfasst: Fr, 04.06.2010 17:56
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

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

Verfasst: Fr, 04.06.2010 18:35
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)

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

Verfasst: Fr, 04.06.2010 18:53
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

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

Verfasst: Fr, 04.06.2010 19:56
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 ?

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

Verfasst: Fr, 04.06.2010 20:34
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.

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

Verfasst: Fr, 04.06.2010 20:48
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 ...

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

Verfasst: Sa, 05.06.2010 00:30
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.

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

Verfasst: Sa, 05.06.2010 08:02
von clag
Moin DPunch

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

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

Verfasst: Sa, 05.06.2010 08:03
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

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

Verfasst: Sa, 05.06.2010 10:03
von clag
Hi Karo

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

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

Verfasst: Sa, 05.06.2010 13:12
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 :)