Hallo, heute habe ich feststellen müssen, dass wieder einige Schüler beim Konvertieren aus den Rohdaten der WinSV-Schuldatenbank nicht übernommen wurden. Ich kenne mich mit Perl nicht aus, aber nehme an, dass in dem Script als Datentrennzeichen das "," verwendet (siehe Zeile 6: @line= split /,/;)? #!/usr/bin/perl -w open OUT,">userlist.txt"; print OUT "NACHNAME:VORNAME:GEBURTSTAG:KLASSE\n"; while(<>) { s/"//g; @line = split /,/; $Klasse = $line[52] || $line[53]; $Klasse =~ s/^0//g; ... Dann ist das Problem klar: die Klasse der jetzt nicht angelegten Schüler kommen erst nach dem 54 ",", die von anderen Schülern nach dem 52. bzw. 53. ",". Da ich mir nicht vorstellen konnte, dass eine Datenbank so einen Quatsch macht, habe ich nachgezählt: Wenn man als Trennzeichen die " verwendet, stehen die Klasse (anscheinend ;-)) _immer_ zwischen den 52 " ". Wenn man das Script dahingehend ändert (noch ungetestet) müsste das Ganze dann funktionieren. (Herr Varkoly bestätigt das hoffentlich oder schreibt ganz groß "NEIN -FALSCH!!") alte Zeilen: s/"//g; @line = split /,/; $Klasse = $line[52] || $line[53]; neue Zeilen: s/"//g; (hier weiß ich nicht, ob man diese Zeile jetzt weglassen kann :-( ) @line = split /"/; $Klasse = $line[103]; Anmerkung: 105 deshalb: der Datensatz hat folgende Form " "," "," " ...,"Klasse" (und da Klasse zwischen den 52 " " steht, kommen vor der Klasse genau 103 "). Viele Grüße Dieter P.S.: ich komme demnächst bestimmt noch dazu das ganze zu testen.
Am Mittwoch, 24. September 2003 00:16 schrieb Dieter Kroemer:
P.S.: ich komme demnächst bestimmt noch dazu das ganze zu testen.
Ich habe jetzt getestet und es scheint, dass das folgende Script funktioniert. geändert wurden folgende Zeilen : s/,//g; @line = split /"/; $Klasse = $line[103]; print OUT "$line[5]:$line[11]:$line[19]:$Klasse\n"; Das gesamte Script lautet dann: #!/usr/bin/perl -w open OUT,">userlist.txt"; print OUT "NACHNAME:VORNAME:GEBURTSTAG:KLASSE\n"; while(<>) { s/,//g; @line = split /"/; $Klasse = $line[103]; $Klasse =~ s/^0//g; $Klasse =~ s/ //g; $Klasse =~ s/\/4//g; $Klasse = uc($Klasse); print OUT "$line[5]:$line[11]:$line[19]:$Klasse\n"; } Viele Grüße Dieter
Dieter Kroemer wrote:
Am Mittwoch, 24. September 2003 00:16 schrieb Dieter Kroemer:
P.S.: ich komme demnächst bestimmt noch dazu das ganze zu testen.
Ich habe jetzt getestet und es scheint, dass das folgende Script funktioniert. geändert wurden folgende Zeilen : s/,//g; @line = split /"/; $Klasse = $line[103]; print OUT "$line[5]:$line[11]:$line[19]:$Klasse\n";
Das gesamte Script lautet dann:
#!/usr/bin/perl -w
open OUT,">userlist.txt";
print OUT "NACHNAME:VORNAME:GEBURTSTAG:KLASSE\n";
while(<>) { s/,//g; @line = split /"/; $Klasse = $line[103]; $Klasse =~ s/^0//g; $Klasse =~ s/ //g; $Klasse =~ s/\/4//g; $Klasse = uc($Klasse); print OUT "$line[5]:$line[11]:$line[19]:$Klasse\n"; }
Viele Grüße Dieter
Könnte das evtl. so in den SLSS übernommen werden? Oder wurde es schon? Fragen über Fragen...
Hallo Am Donnerstag, 2. Oktober 2003 09:57 schrieb Frank Wein:
Dieter Kroemer wrote:
Am Mittwoch, 24. September 2003 00:16 schrieb Dieter Kroemer:
P.S.: ich komme demnächst bestimmt noch dazu das ganze zu testen.
Ich habe jetzt getestet und es scheint, dass das folgende Script funktioniert. geändert wurden folgende Zeilen : s/,//g; @line = split /"/; $Klasse = $line[103]; print OUT "$line[5]:$line[11]:$line[19]:$Klasse\n";
Das gesamte Script lautet dann:
#!/usr/bin/perl -w
open OUT,">userlist.txt";
print OUT "NACHNAME:VORNAME:GEBURTSTAG:KLASSE\n";
while(<>) { s/,//g; @line = split /"/; $Klasse = $line[103]; $Klasse =~ s/^0//g; $Klasse =~ s/ //g; $Klasse =~ s/\/4//g; $Klasse = uc($Klasse); print OUT "$line[5]:$line[11]:$line[19]:$Klasse\n"; }
Viele Grüße Dieter
Könnte das evtl. so in den SLSS übernommen werden? Oder wurde es schon? Fragen über Fragen...
Da haben wir jetzt ein Problem: die "Testliste", die wir hier im Februar bekommen haben, hat Kommas als Separatoren. Gänsefüßchen kommen dort nicht vor. Irgendwie scheint mir etwas unlogisch: die Testlisten, die ich hier sonst noch habe, haben u.U. Kommas als Seperatoren und die einzelnen Felder werden zusätzlich noch mit Gänsefüßchen "eingerahmt". Wenn ich das neue Skript überfliege, scheint es mir so, als würden zuerst die Kommatas (also bei uns die eigentlichen Feldtrenner) entfernt und anschließend die Gänsefüßchen als Trenner benutzt? Kann evtl. mal jemand überprüfen, ob es unterschiedliche Exportmöglichkeiten aus WinSV gibt? Etwas verwirrt, Lars PS: In Anbetracht der anscheinend zig Schulverwaltungsprogramme (gesegnetes Deutschland, lustiges England!) werden wir hier noch ein wenig wursteln und eine einfachere Lösung (vor allem für das Handbuch - ich will nich 20 convert-Skripten auflisten :) suchen. Derzeit angedacht ist eine globale Variable, die standardmäßig auf "cvs" stehen könnte, die dann das zu nutzende convert-Programm enthält. Dann bräuchte nur einmal die Variable entsprechend geändert werden und fortan könnte die exportierte Datei einfach auf den Server hochgeladen werden - das Konvertieren erfolgt dann im Hintergrund. Allerdings brauchen wir zum Testen noch diverse Exportlisten der verschiedenen Programme... (wer welche hat, per PM mit Angabe des Programms und der "Exportvariante" an mich...) -- Lars Rupp SUSE LINUX AG, Deutschherrnstr. 15-19, Lars.Rupp@suse.de D-90429 Nürnberg +49 (0) 911 740530
Am Donnerstag, 2. Oktober 2003 10:37 schrieb Lars Rupp:
Wenn ich das neue Skript überfliege, scheint es mir so, als würden zuerst die Kommatas (also bei uns die eigentlichen Feldtrenner) entfernt und anschließend die Gänsefüßchen als Trenner benutzt?
Das mit den Kommatas entfernen kann man imho auch weglassen - wie gesagt, mit Perl kenne ich mich nicht aus, aber die Kommatas sind eben _nicht_ die geeigneten Feldtrenner, da in Ausnahmen innerhalb der Gänsefüßchen auch Kommatas vorkommen können und dann ist das xte-Feld eben das x+1te-Feld usw. Die Kommata innerhalb der Gänsefüsschen sind zwar wahrscheinlich nicht vorgesehen, passieren aber anscheinend ab und zu beim Eingeben der Daten ins Schulverwaltungsprogramm. Als Beipspiel ein Datensatz aus WinSV einer anderen Schule (dort also das gleiche Problem wie in Scheßlitz), der genau nach der Anleitung exportiert wurde. (Die Gänsefüsschen erscheinen also in Schesslitz und der anderen Realschule, wenn man bei WinSV genau nach der Doku vorgeht.) "R*** J****","RS 5* R**** J*",1355,"R***","","","Jennifer","Jennifer","W","","06.***","1992","N***t","D","RK","R***","Günter","H","VA","","R****n,", ... usw. usw. (müsste eigentlich eine Zeile sein.) und beim letzten (kopierten) Datenfeld ist es passiert, die Schülerin heißt R***, (also mit Komma am Ende!!) und damit gibts diese Probleme. Und bei einigen Schülern ist dieser Tippfehler eben in zwei Datensätzen vorgekommen und damit kommt der eigentlich Datensatz erst zwei Felder weiter rechts, wenn man das Komma als Datentrennzeichen verwendet. Die Gänsefüsschen als Trennzeichen (wenn's denn welche gibt ;-) ) sind imho sicherer, da man kaum einen Schüler mit Kroemer" Dieter eingibt, aber Kroemer, Dieter kann schon mal passieren. Viele Grüße Dieter
Dieter Kroemer wrote:
Am Donnerstag, 2. Oktober 2003 10:37 schrieb Lars Rupp:
Wenn ich das neue Skript überfliege, scheint es mir so, als würden zuerst die Kommatas (also bei uns die eigentlichen Feldtrenner) entfernt und anschließend die Gänsefüßchen als Trenner benutzt?
Das mit den Kommatas entfernen kann man imho auch weglassen - wie gesagt, mit Perl kenne ich mich nicht aus, aber die Kommatas sind eben _nicht_ die geeigneten Feldtrenner, da in Ausnahmen innerhalb der Gänsefüßchen auch Kommatas vorkommen können und dann ist das xte-Feld eben das x+1te-Feld usw. Die Kommata innerhalb der Gänsefüsschen sind zwar wahrscheinlich nicht vorgesehen, passieren aber anscheinend ab und zu beim Eingeben der Daten ins Schulverwaltungsprogramm. Als Beipspiel ein Datensatz aus WinSV einer anderen Schule (dort also das gleiche Problem wie in Scheßlitz), der genau nach der Anleitung exportiert wurde. (Die Gänsefüsschen erscheinen also in Schesslitz und der anderen Realschule, wenn man bei WinSV genau nach der Doku vorgeht.)
"R*** J****","RS 5* R**** J*",1355,"R***","","","Jennifer","Jennifer","W","","06.***","1992","N***t","D","RK","R***","Günter","H","VA","","R****n,", ... usw. usw. (müsste eigentlich eine Zeile sein.)
und beim letzten (kopierten) Datenfeld ist es passiert, die Schülerin heißt R***, (also mit Komma am Ende!!) und damit gibts diese Probleme. Und bei einigen Schülern ist dieser Tippfehler eben in zwei Datensätzen vorgekommen und damit kommt der eigentlich Datensatz erst zwei Felder weiter rechts, wenn man das Komma als Datentrennzeichen verwendet. Die Gänsefüsschen als Trennzeichen (wenn's denn welche gibt ;-) ) sind imho sicherer, da man kaum einen Schüler mit Kroemer" Dieter eingibt, aber Kroemer, Dieter kann schon mal passieren.
Viele Grüße Dieter
Evtl. wäre ein Script nützlich das irgendwie vorher die Gültigkeit der Datei prüft, anhand Anzahl der Felder, Kommas, "" usw. Gruß Frank
Am Sonntag, 5. Oktober 2003 11:16 schrieb Frank Wein:
Evtl. wäre ein Script nützlich das irgendwie vorher die Gültigkeit der Datei prüft, anhand Anzahl der Felder, Kommas, "" usw.
Gute Idee - habe ich gleich mal umgesetzt: Die Standardanzahl der Datensätze liegt bei 245, wenn man als Feldtrenner das , verwendet. Um alle Schüler aufzulisten, bei denen zu viele Kommatas da sind (also auch zu viele Felder), könnte man folgende Zeile auf die Rohdaten (in meinem Fall heißt diese Datei sd-eigne.prn) loslassen: cat sd-eigne.prn |awk -F',' '{print NF" " $2}'|grep 245 -v Das Ergebnis sieht dann bei uns folgendermaßen aus (Namen sind "ausgesternt"): 246 "RS 6 B M H***" 246 "RS 7 B M B***" 247 "RS 7 B M E*" 246 "RS 7 C W H*" 246 "RS 7 E M P*" 246 "RS 8 A M B*" 247 "RS 8 D M E*" 247 "RS 9 D W S*" 247 "RS 9 E/4 W A*" 248 "RS 10 C W W*" 246 "RS 10 F/4 M A*" Macht man das ganze mit den " als Feldtrenner, sieht der Befehl folgendermaßen aus (jetzt sind es standardmäßig 459 Feldtrennzeichen): cat sd-eigne.prn |awk -F'"' '{print NF" " $2}'|grep 459 -v (das " ist von ' eingerahmt). und da erhalte ich _keinen_ Ausreißer - d.h. ich werde auf jeden Fall als Feldtrenner die " verwenden, da ich keine Lust habe jedes Schuljahr die Rohdaten im Sekretariat zu exportieren, dann an einem Linuxrechner zu sehen, ob sich wieder ein Komma zuviel eingeschlichen hat, gegebenenfalls wieder ins Sekretariat zu rennen, die Daten ausbessern lassen und dann wieder neu zu exportieren. -- Viele Grüße/Kind regards (o_ (o_ Dieter //> (o_ (o_ //\ http://www.linux-in-der-schule.de V_)_ (/)_ (\)_ V_/_
Nun meine Idee wäre folgendes: Tatsache ist (wenn ich mich nicht irre), dass * jede Feld zwischen 2 " ist * und als Feldseparator , verwendet wird. Das heisst wenn ich die Zeichnfolge "," als Feldseparator benutze bin ich auf der Richtige Seite oder??? Jetzt sieht das Script so aus: ---------------->8------------------snip-------------->8-------------------- #!/usr/bin/perl -w open OUT,">userlist.txt"; print OUT "NACHNAME:VORNAME:GEBURTSTAG:KLASSE\n"; while(<>) { s/","/:/g; s/"//g; s/,/ /g; @line = split /:/; $Klasse = $line[52] || $line[53]; $Klasse =~ s/^0//g; $Klasse =~ s/ //g; $Klasse =~ s/\//-/g; $Klasse = uc($Klasse); print OUT "$line[3]:$line[6]:$line[10]:$Klasse\n"; } ---------------->8------------------snap-------------->8-------------------- Könnte jemand das bitte testen? On Sun, Oct 05, 2003 at 06:35:31PM +0200, Dieter Kroemer wrote:
Am Sonntag, 5. Oktober 2003 11:16 schrieb Frank Wein:
Evtl. wäre ein Script nützlich das irgendwie vorher die Gültigkeit der Datei prüft, anhand Anzahl der Felder, Kommas, "" usw.
Gute Idee - habe ich gleich mal umgesetzt:
Die Standardanzahl der Datensätze liegt bei 245, wenn man als Feldtrenner das , verwendet. Um alle Schüler aufzulisten, bei denen zu viele Kommatas da sind (also auch zu viele Felder), könnte man folgende Zeile auf die Rohdaten (in meinem Fall heißt diese Datei sd-eigne.prn) loslassen:
cat sd-eigne.prn |awk -F',' '{print NF" " $2}'|grep 245 -v
Das Ergebnis sieht dann bei uns folgendermaßen aus (Namen sind "ausgesternt"):
246 "RS 6 B M H***" 246 "RS 7 B M B***" 247 "RS 7 B M E*" 246 "RS 7 C W H*" 246 "RS 7 E M P*" 246 "RS 8 A M B*" 247 "RS 8 D M E*" 247 "RS 9 D W S*" 247 "RS 9 E/4 W A*" 248 "RS 10 C W W*" 246 "RS 10 F/4 M A*"
Macht man das ganze mit den " als Feldtrenner, sieht der Befehl folgendermaßen aus (jetzt sind es standardmäßig 459 Feldtrennzeichen): cat sd-eigne.prn |awk -F'"' '{print NF" " $2}'|grep 459 -v (das " ist von ' eingerahmt).
und da erhalte ich _keinen_ Ausreißer - d.h. ich werde auf jeden Fall als Feldtrenner die " verwenden, da ich keine Lust habe jedes Schuljahr die Rohdaten im Sekretariat zu exportieren, dann an einem Linuxrechner zu sehen, ob sich wieder ein Komma zuviel eingeschlichen hat, gegebenenfalls wieder ins Sekretariat zu rennen, die Daten ausbessern lassen und dann wieder neu zu exportieren.
-- Viele Grüße/Kind regards (o_ (o_ Dieter //> (o_ (o_ //\ http://www.linux-in-der-schule.de V_)_ (/)_ (\)_ V_/_
-- Um die Liste abzubestellen, schicken Sie eine Mail an: slss-unsubscribe@suse.com Um eine Liste aller verf?gbaren Kommandos zu bekommen, schicken Sie eine Mail an: slss-help@suse.com
-- ----------------------------------- Péter Varkoly -o) SuSE Linux AG /\\ e-mail: Peter.Varkoly@suse.de _\_/ Tel.: +49-911-74053484 Mobil.: +49-179-1277635 -----------------------------------
Sorry eine Zeile fehlt noch. Die Zahlen sind nämlich nicht zwischen zwei ". ---------------->8-----------------------8<------------------snip--------------8<---------------------------->8-------------------- #!/usr/bin/perl -w open OUT,">userlist.txt"; print OUT "NACHNAME:VORNAME:GEBURTSTAG:KLASSE\n"; while(<>) { s/,(\d+),/:$1:/g; s/","/:/g; s/"//g; s/,/ /g; @line = split /:/; $Klasse = $line[52] || $line[53]; $Klasse =~ s/^0//g; $Klasse =~ s/ //g; $Klasse =~ s/\//-/g; $Klasse = uc($Klasse); print OUT "$line[3]:$line[6]:$line[10]:$Klasse\n"; } ---------------->8----------------------->8------------------snap-------------->8---------------------------->8-------------------- On Thu, Oct 16, 2003 at 10:35:02AM +0200, Peter Varkoly wrote:
Nun meine Idee wäre folgendes:
Tatsache ist (wenn ich mich nicht irre), dass * jede Feld zwischen 2 " ist * und als Feldseparator , verwendet wird. Das heisst wenn ich die Zeichnfolge "," als Feldseparator benutze bin ich auf der Richtige Seite oder???
Jetzt sieht das Script so aus: ---------------->8------------------snip-------------->8-------------------- #!/usr/bin/perl -w
open OUT,">userlist.txt";
print OUT "NACHNAME:VORNAME:GEBURTSTAG:KLASSE\n";
while(<>) { s/","/:/g; s/"//g; s/,/ /g; @line = split /:/; $Klasse = $line[52] || $line[53]; $Klasse =~ s/^0//g; $Klasse =~ s/ //g; $Klasse =~ s/\//-/g; $Klasse = uc($Klasse); print OUT "$line[3]:$line[6]:$line[10]:$Klasse\n"; } ---------------->8------------------snap-------------->8--------------------
Könnte jemand das bitte testen?
On Sun, Oct 05, 2003 at 06:35:31PM +0200, Dieter Kroemer wrote:
Am Sonntag, 5. Oktober 2003 11:16 schrieb Frank Wein:
Evtl. wäre ein Script nützlich das irgendwie vorher die Gültigkeit der Datei prüft, anhand Anzahl der Felder, Kommas, "" usw.
Gute Idee - habe ich gleich mal umgesetzt:
Die Standardanzahl der Datensätze liegt bei 245, wenn man als Feldtrenner das , verwendet. Um alle Schüler aufzulisten, bei denen zu viele Kommatas da sind (also auch zu viele Felder), könnte man folgende Zeile auf die Rohdaten (in meinem Fall heißt diese Datei sd-eigne.prn) loslassen:
cat sd-eigne.prn |awk -F',' '{print NF" " $2}'|grep 245 -v
Das Ergebnis sieht dann bei uns folgendermaßen aus (Namen sind "ausgesternt"):
246 "RS 6 B M H***" 246 "RS 7 B M B***" 247 "RS 7 B M E*" 246 "RS 7 C W H*" 246 "RS 7 E M P*" 246 "RS 8 A M B*" 247 "RS 8 D M E*" 247 "RS 9 D W S*" 247 "RS 9 E/4 W A*" 248 "RS 10 C W W*" 246 "RS 10 F/4 M A*"
Macht man das ganze mit den " als Feldtrenner, sieht der Befehl folgendermaßen aus (jetzt sind es standardmäßig 459 Feldtrennzeichen): cat sd-eigne.prn |awk -F'"' '{print NF" " $2}'|grep 459 -v (das " ist von ' eingerahmt).
und da erhalte ich _keinen_ Ausreißer - d.h. ich werde auf jeden Fall als Feldtrenner die " verwenden, da ich keine Lust habe jedes Schuljahr die Rohdaten im Sekretariat zu exportieren, dann an einem Linuxrechner zu sehen, ob sich wieder ein Komma zuviel eingeschlichen hat, gegebenenfalls wieder ins Sekretariat zu rennen, die Daten ausbessern lassen und dann wieder neu zu exportieren.
-- Viele Grüße/Kind regards (o_ (o_ Dieter //> (o_ (o_ //\ http://www.linux-in-der-schule.de V_)_ (/)_ (\)_ V_/_
-- Um die Liste abzubestellen, schicken Sie eine Mail an: slss-unsubscribe@suse.com Um eine Liste aller verf?gbaren Kommandos zu bekommen, schicken Sie eine Mail an: slss-help@suse.com
-- ----------------------------------- Péter Varkoly -o) SuSE Linux AG /\\ e-mail: Peter.Varkoly@suse.de _\_/ Tel.: +49-911-74053484 Mobil.: +49-179-1277635 -----------------------------------
-- Um die Liste abzubestellen, schicken Sie eine Mail an: slss-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: slss-help@suse.com
-- ----------------------------------- Péter Varkoly -o) SuSE Linux AG /\\ e-mail: Peter.Varkoly@suse.de _\_/ Tel.: +49-911-74053484 Mobil.: +49-179-1277635 -----------------------------------
Am Donnerstag, 16. Oktober 2003 11:00 schrieb Peter Varkoly:
---------------->8-----------------------8<------------------snip-- ------------8<---------------------------->8-------------------- #!/usr/bin/perl -w ...-----------
Könnte jemand das bitte testen?
Also bei mir funktioniert es - es sind jetzt immer (zumindest bei meinen vorliegenden 1000 Schülern) 218 Datenfelder - auch die erzeugte userlist.txt sieht vernünftig aus :-) Allerdings sollte man in die Doku mit anmerken, dass die vierstufigen-Klassen auch im Schulverwaltungsprogramm vernünftig eingetragen sind. Bei mir war ja zu Beginn das Problem mit den vierstufigen Klassen (z.B: 10F/4) andere Schulen haben für die Unterscheidung 4stufige und 6stufig Klasse andere "Lösungen" gefunden :-((( D.h. die Schulen müssten ihr Konvertierungsscript evtl. je nach Gegenheit selbst anpassen (oder die Klassen wie bei mir nennen) - naja aber in 2-3 Jahren dürfte dieses Problem erledigt sein, da es dann keine 4stufigen Klassen mehr gibt. -- Viele Grüße/kind regards (o_ (o_ Dieter //> (o_ (o_ //\ http://www.linux-in-der-schule.de V_)_ (/)_ (\)_ V_/_
participants (4)
-
Dieter Kroemer
-
Frank Wein
-
Lars Rupp
-
Peter Varkoly