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
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

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...
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:
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:
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
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

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"

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
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
