Re: shellcript
Toni schrieb: Hallo, ich versuche gerade ein kleines shellscript zu basteln welches eine csv Datei ausliest und Ordner bzw. Dateien erstellt. Nur hab ich keine Ahnung wie ich das machen soll, kenn mich nur in php aus dort könnt ichs aber das ist doch etwas umständlich. Gibt es die möglichkeit ein csv Reihenweise abzuarbeiten? Also die csv ist so aufgebaut: Ordner;Datei;Inhalt In php würd ichs so machen (oder so ähnlich habs nicht getestet) $datei = fopen($csv, r); foreach($datei as $zeile) { $daten = explode(;, $zeile); mkdir($daten[0]); $datei_neu = fopen($pfad/$daten[0]/$daten[1], w+); fwrite($datei_neu , $daten[2], 512); fclose($datei_neu); } fclose($datei); dann ist der Weg zu perl nicht weit :-) ,---[ csvtostuct.pl ] - | #!/usr/bin/perl | open (FH, $ARGV[0]); | while (FH) { | chomp; | @inhalt = split (';', $_); | system(mkdir $inhalt[0]); | system(echo \$inhalt[2]\ $inhalt[0]/$inhalt[1]); | } | close(FH); `--- Aufruf: cvstostruct.pl csv-datei -- /// HTH (..) - stefan oo0-\/-0oo--- http://www.sbsbavaria.de/ -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: shellcript
On Tue, 17 Feb 2004 18:48:40 +0100 Stefan Blechschmidt [EMAIL PROTECTED] wrote: Toni schrieb: Hallo, ich versuche gerade ein kleines shellscript zu basteln welches eine csv Datei ausliest und Ordner bzw. Dateien erstellt. Nur hab ich keine Ahnung wie ich das machen soll, kenn mich nur in php aus dort könnt ichs aber das ist doch etwas umständlich. Gibt es die möglichkeit ein csv Reihenweise abzuarbeiten? Also die csv ist so aufgebaut: Ordner;Datei;Inhalt In php würd ichs so machen (oder so ähnlich habs nicht getestet) $datei = fopen($csv, r); foreach($datei as $zeile) { $daten = explode(;, $zeile); mkdir($daten[0]); $datei_neu = fopen($pfad/$daten[0]/$daten[1], w+); fwrite($datei_neu , $daten[2], 512); fclose($datei_neu); } fclose($datei); dann ist der Weg zu perl nicht weit :-) ,---[ csvtostuct.pl ] - | #!/usr/bin/perl | open (FH, $ARGV[0]); | while (FH) { | chomp; | @inhalt = split (';', $_); | system(mkdir $inhalt[0]); | system(echo \$inhalt[2]\ $inhalt[0]/$inhalt[1]); | } | close(FH); `--- fuktionniert prinzipiell, aber wenn ich mich richtig erinnere werden bei deinen 2 system()-Aufrufe jeweils shell-child-Prozesse gestartet. kostet Zeit. bei ein Paar Zeilen kein Problem, bei viele viele Aufrufe tötlich langsam ! bei dem Shell-Skript hast Du eben das Problem nicht. Wie gesagt, frei aus dem Gedächtnis raus Joel -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: shellcript
Am Dienstag, 17. Februar 2004 22:57 schrieb Joel HATSCH: On Tue, 17 Feb 2004 18:48:40 +0100 Stefan Blechschmidt [EMAIL PROTECTED] wrote: dann ist der Weg zu perl nicht weit :-) ,---[ csvtostuct.pl ] - | #!/usr/bin/perl | open (FH, $ARGV[0]); | while (FH) { | chomp; | @inhalt = split (';', $_); | system(mkdir $inhalt[0]); | system(echo \$inhalt[2]\ $inhalt[0]/$inhalt[1]); | } | close(FH); `--- fuktionniert prinzipiell, aber wenn ich mich richtig erinnere werden bei deinen 2 system()-Aufrufe jeweils shell-child-Prozesse gestartet. kostet Zeit. bei ein Paar Zeilen kein Problem, bei viele viele Aufrufe tötlich langsam ! bei dem Shell-Skript hast Du eben das Problem nicht. Wie gesagt, frei aus dem Gedächtnis raus Das ist ein tödlicher Irrtum ;-) In einem Shell-Script werden natürlich auch für _jeden_ Befehl, der nicht Shell-Builtin ist, Childs gestartet, also im Allgemeinen deutlich mehr als in Perl-Programmen (Du musst ja die Zeile parsen - z. B. per cut). Prinzipiell hast Du mit dem Einwand recht, aber Perl wäre nicht Perl, wenn man das nicht besser lösen könnte ;-) #!/usr/bin/perl open (FH, $ARGV[0]) or die $!; while (FH) { chomp; @inhalt = split /;/; mkdir $inhalt[0]; open (OUT, . $inhalt[0] . / . $inhalt[1]) or die $!; print OUT $inhalt[2], \n; close OUT; } close(FH); Jan -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: shellcript
On Wed, Feb 18, 2004 at 01:16:03AM +0100, Jan Trippler wrote: Das ist ein tödlicher Irrtum ;-) In einem Shell-Script werden natürlich auch für _jeden_ Befehl, der nicht Shell-Builtin ist, Childs gestartet, also im Allgemeinen deutlich mehr als in Perl-Programmen (Du musst ja die Zeile parsen - z. B. per cut). Siehe mein Beispiel zu dem Thema, das benutzt nur builtin Funktionen, lediglich das, was ich durch die drei Punkte angedeutet habe, könnte externe Befehle enthalten. Wenn es nur darum geht, Verzeichnisse anzulegen und da mit echo etwas reinzuschreiben, ist nur mkdir ein externes Binary. Grüße, Torsten -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: shellcript
Am Mittwoch, 18. Februar 2004 01:19 schrieb Torsten Schneider: On Wed, Feb 18, 2004 at 01:16:03AM +0100, Jan Trippler wrote: Das ist ein tödlicher Irrtum ;-) In einem Shell-Script werden natürlich auch für _jeden_ Befehl, der nicht Shell-Builtin ist, Childs gestartet, also im Allgemeinen deutlich mehr als in Perl-Programmen (Du musst ja die Zeile parsen - z. B. per cut). Siehe mein Beispiel zu dem Thema, das benutzt nur builtin Funktionen, lediglich das, was ich durch die drei Punkte angedeutet habe, könnte externe Befehle enthalten. Wenn es nur darum geht, Verzeichnisse anzulegen und da mit echo etwas reinzuschreiben, ist nur mkdir ein externes Binary. Ich habe Deine Mail wohl noch nicht gekiegt - jedenfalls kann ich sie nicht finden. Es ist mir klar, dass viele Funktionen auch mit Shell-Builitins realisiert werden können, an der grundsätzlichen Aussage ändert das aber nichts - egal ob per system aus Perl, C oder PHP heraus oder ob als Programm-Aufruf aus einem Shell-Script - es ist immer ein Fork (deshalb ist es auch gut, nach Möglichkeit Funktionen zu nutzen, die die Programmiersprachen als Builtin oder Modul oder Bibliothek mitbringen - das wollte ich in meinem Beispiel auch nur demonstrieren). Jan -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: shellcript
Torsten Schneider wrote: On Wed, Feb 18, 2004 at 01:16:03AM +0100, Jan Trippler wrote: Das ist ein tödlicher Irrtum ;-) In einem Shell-Script werden natürlich auch für _jeden_ Befehl, der nicht Shell-Builtin ist, Childs gestartet, also im Allgemeinen deutlich mehr als in Perl-Programmen (Du musst ja die Zeile parsen - z. B. per cut). Siehe mein Beispiel zu dem Thema, das benutzt nur builtin Funktionen, lediglich das, was ich durch die drei Punkte angedeutet habe, könnte externe Befehle enthalten. Wenn es nur darum geht, Verzeichnisse anzulegen und da mit echo etwas reinzuschreiben, ist nur mkdir ein externes Binary. Hihi frag 3 Leute die sich auskennen wie man ein Problem löst und Du bekommst min. 5 Möglichkeiten. Naja in dem Bereich gibts halt viele Wege... Also ich hab das benötigt da ich centericq benutze und ne Liste mit UIN´s und Nicks bekommen hab. Mir war es zu mühsam die Liste händisch einzutippen da wollt ich eben ein kleines script basteln im Endeffekt ist das daraus geworden: #!/bin/sh IFS=';' if [ $1 ] then if [ $2 ] then folder=$2 else folder=$HOME'/.centericq' fi if [ -r $2 ] then if [ -r $1 ] then while read icq nick vname nname group; do mkdir $folder/$icq echo -e $nick'\n'$vname'\n'$nname'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'$group $folder'/'$icq'/info' done $1 else echo 'file '$1' not found' fi else echo 'directory '$2' not found' fi else echo -e 'addicq: missing argument\nuse addicq file [destination]\nfile is a csv file like 123456;Nick;first name;name;group\ndestination is optional default: /~.centericq' fi ist übrigens mein erstes script kann mir gut vorstellen das das noch ein wenig einfacher geht Grüße, Torsten Gruß Toni -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)
shellcript
Hallo, ich versuche gerade ein kleines shellscript zu basteln welches eine csv Datei ausliest und Ordner bzw. Dateien erstellt. Nur hab ich keine Ahnung wie ich das machen soll, kenn mich nur in php aus dort könnt ichs aber das ist doch etwas umständlich. Gibt es die möglichkeit ein csv Reihenweise abzuarbeiten? Also die csv ist so aufgebaut: Ordner;Datei;Inhalt In php würd ichs so machen (oder so ähnlich habs nicht getestet) $datei = fopen($csv, "r"); foreach($datei as $zeile) { $daten = explode(";", $zeile); mkdir($daten[0]); $datei_neu = fopen($pfad/$daten[0]/$daten[1], "w+"); fwrite($datei_neu , $daten[2], 512); fclose($datei_neu); } fclose($datei); Gruß Toni