Re: shellcript

2004-02-17 Diskussionsfäden Stefan Blechschmidt
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

2004-02-17 Diskussionsfäden Joel HATSCH
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

2004-02-17 Diskussionsfäden Jan Trippler
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

2004-02-17 Diskussionsfäden 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.


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

2004-02-17 Diskussionsfäden Jan Trippler
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

2004-02-17 Diskussionsfäden Toni
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

2004-02-16 Diskussionsfäden Toni




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