Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]1079[/thread]

Suchfunktion in .csv Dateien

Leser: 3


<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten
Del Piero
 2007-06-19 01:29
#10038 #10038
User since
2007-03-21
28 Artikel
BenutzerIn
[default_avatar]
Hey
ich habe noch ein Problem ich soll eine Suchfunktion erstellen die in csv Dateien Daten ausliest. Die Daten sind Kommagetrennt in der Datei (/var/www/html/cgi-bin/stunden.csv).

Beispiel für die Datei:
"Tag;Stunde;Lehrer;Geschlecht;Klasse;Fach;Raum"
"1;5;Meier;M;13D;GK,411"
"4;2;Gruber;M;11B;REL,203"
"1;7;Brunhuber;M;9A;LBP,367"

Auf der Suche seite sind dann Checkboxen über die man nach freien stunden der lehrer suchen sollen kann über einen Button Suche Starten soll dann die suche gestartet werden und die Lehrer aufgelistet die in den angegebenen Stunden frei haben

Hier die Html-Seite für die Auswahl:
http://img402.imageshack.us/img402/258/suchesu3.jp...
kann mir vllt. da jemand helfen wäre nett

gruß Andy\n\n

<!--EDIT|Del Piero|1182247330-->
Ronnie
 2007-06-19 02:03
#10039 #10039
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Pseudocode:

- Erstelle eine Liste aller Lehrer
- Erstelle ein Hash (Zuordnung) aller Lehrer auf die Stunden
- Schau in das Zuordnung für die gesuchte Stunde
- Entferne die Liste der Lehrer für die gesuchte Stunde von der Gesamtliste
- Gib die Liste der verfügbaren Lehrer aus.

Ist das 'ne Hausaufgabe, oder sowas?

EDIT: Dazu empfehle ich noch CPAN:Text::CSV_XS.\n\n

<!--EDIT|Ronnie|1182204579-->
renee
 2007-06-19 12:18
#10040 #10040
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es geht noch einfacher: Mit CPAN:DBD::CSV kannst Du in der CSV-Datei "navigieren" bzw. suchen wie in einer Datenbank.

Wenn die Stundenangabe in obigem CSV-Ausschnitt die Stunde bedeutet, in der ein Lehrer frei hat, dann könnte es ungefähr so aussehen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;
use DBI;

my $dbh = DBI->connect("DBI:CSV:f_dir=/path/to/dir/with/csv/;csv_sep_char=\\;") or die $DBI::errstr;
$dbh->{'csv_tables'}->{'info'} = { 'file' => 'info2.csv'};

my $sth = $dbh->prepare( qq~SELECT Lehrer FROM info WHERE Stunde = ? AND Tag = ?~) or die $dbh->errstr;
$sth->execute( $stunde_die_gesucht_wird, $tag_fuer_den_gesucht_wird) or die $dbh->errstr;

while( my ($lehrer) = $sth->fetchrow_array() ){
    print $lehrer,"\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Del Piero
 2007-06-19 18:03
#10041 #10041
User since
2007-03-21
28 Artikel
BenutzerIn
[default_avatar]
ich verstehe es leider nicht ganz :( ! wäre nett wenn ein paar kommentare dabei wären zum verstehen :rock:\n\n

<!--EDIT|Del Piero|1182261852-->
renee
 2007-06-19 18:16
#10042 #10042
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/perl

# strict und warnings sollten in 
# jedem Programm Pflicht sein
use strict;
use warnings;

# lade DBI für die Datenbankverbindung
use DBI;

# Ordner, in dem die CSV-Datei liegt
my $dir = '/path/to/dir/with/csv/';

# Trennzeichen in der Datei (hier: das Semikolon)
my $sep = ';';

# Verwende DBI mit DBD::CSV, damit mit den
# CSV-Dateien gearbeitet werden kann
my $dsn = "DBI:CSV:f_dir=$dir;csv_sep_char=\\".$sep

# stelle Verbindung zur Datenbank her
my $dbh = DBI->connect($dsn) or die $DBI::errstr;

# Der Name der CSV-Datei (ohne Pfad)
my $filename = 'info2.csv';

# Damit wird die Datei als Tabelle 'info' gehandelt
$dbh->{'csv_tables'}->{'info'} = { 'file' => $filename};

# Lehrer, der in der 2. Stunde am Tag 4 frei hat
my $gewaehlte_stunde = 2;
my $gewaehlter_tag     = 4;

# hole alle Lehrer aus der Tabelle, bei denen
# Stunde gleich der gewählten Stunde und der Tag 
# gleich dem gewählten Tag ist
my $select = qq~SELECT Lehrer FROM info WHERE Stunde = ? AND Tag = ?~

# bereite die Abfrage vor
my $sth = $dbh->prepare( $select ) or die $dbh->errstr;

# führe die Abfrage aus
$sth->execute( $gewaehlte_stunde, $gewaehlter_tag) or die $dbh->errstr;

# gib alle gefundenen Lehrer aus.
while( my ($lehrer) = $sth->fetchrow_array() ){
    print $lehrer,"\n";
}


Kann sein, dass Du CPAN:DBD::CSV erst noch Wiki:installieren musst.

Die Verbindung mit dem HTML-Formular musst Du selbst herstellen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Del Piero
 2007-06-19 19:00
#10043 #10043
User since
2007-03-21
28 Artikel
BenutzerIn
[default_avatar]
ooookkkk hey vielen dank :)
Del Piero
 2007-06-19 19:20
#10044 #10044
User since
2007-03-21
28 Artikel
BenutzerIn
[default_avatar]
also würde das ganze auf das beispiel oben bezogen so aussehen oder?:

Code
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/perl

# strict und warnings sollten in
# jedem Programm Pflicht sein
use strict;
use warnings;

# lade DBI für die Datenbankverbindung
use DBI;

# Ordner, in dem die CSV-Datei liegt
my $dir = '/var/www/html/cgi-bin';

# Trennzeichen in der Datei (hier: das Semikolon)
my $sep = ';';

# Verwende DBI mit DBD::CSV, damit mit den
# CSV-Dateien gearbeitet werden kann
my $dsn = "DBI:CSV:f_dir=$dir;csv_sep_char=\\".$sep

# stelle Verbindung zur Datenbank her
my $dbh = DBI->connect($dsn) or die $DBI::errstr;

# Der Name der CSV-Datei (ohne Pfad)
my $filename = 'stunden.csv';

# Damit wird die Datei als Tabelle 'info' gehandelt
$dbh->{'csv_tables'}->{'info'} = { 'file' => $filename};

# Lehrer, der in der 2. Stunde am Tag 4 frei hat
my $gewaehlte_stunde = 2;
my $gewaehlter_tag = 4;

# hole alle Lehrer aus der Tabelle, bei denen
# Stunde gleich der gewählten Stunde und der Tag
# gleich dem gewählten Tag ist
my $select = qq~SELECT Lehrer FROM info WHERE Stunde = ? AND Tag = ?~

# bereite die Abfrage vor
my $sth = $dbh->prepare( $select ) or die $dbh->errstr;

# führe die Abfrage aus
$sth->execute( $gewaehlte_stunde, $gewaehlter_tag) or die $dbh->errstr;

# gib alle gefundenen Lehrer aus.
while( my ($lehrer) = $sth->fetchrow_array() ){
print $lehrer,"\n";
}
renee
 2007-06-19 19:25
#10045 #10045
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja... Hinter dem my $select ... fehlt noch ein Semikolon, das gleiche hinter my $dsn...!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Del Piero
 2007-06-20 00:12
#10046 #10046
User since
2007-03-21
28 Artikel
BenutzerIn
[default_avatar]
ich habe die funktion nun in eine datei suche.pl gemacht! wie kann ich dies jetzt in die html seite einbinden das es auch mit den checkboxen klappt wenn ich dies anklick dass es dann nach der richtigen stunde sucht???
renee
 2007-06-20 03:08
#10047 #10047
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein bißchen was musst Du auch selbst machen. Wie man mit HTML-Formularen umgehst, kannst Du in Wiki:diesem Artikel nachlesen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten



View all threads created 2007-06-19 01:29.