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

Projekt: Schülerverwaltung

Leser: 2


<< >> 5 Einträge, 1 Seite
Chrischi
 2008-02-21 22:41
#106203 #106203
User since
2008-02-21
1 Artikel
BenutzerIn
[default_avatar]
Hallo Jungs,

ich möchte eine Schülerdatenbank in einer Textdatei erstellen.

Zum Test soll einfach mal Name, Ort und eine Note abgelegt werden.

Wie kann ich eine Überprüfung starten ob für einen
Schüler schon ein Eintrag vorhanden ist und wenn nicht sollten Daten für den Schüler in diese Textdatei geschrieben werden (pro Schüler eine Zeile !?).

Später will ich dann eine einzelne Information von einem bestimmten Schüler auslesen und verarbeiten können! (z.b. die Note von Schüler_XY in eine Variable schreiben, die ich dann verwenden kann).

Bitte helft mir ich brauch das unbedingt und bin ein Einsteiger in Perl. Danke schonmal im vorraus.

Bis jetzt sieht es soweit aus:
(Keine Ahnung ob das zu verwenden ist)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my $Name = ...;
my $Ort = ...;
my $Note = ...;
my @Schueler = ("$Name","$Ort","$Note");

open (DATEI,">/daten.txt") || die "ERROR";

#ABFRAGE

print DATEI "$Schueler[0]" . "\t" .....

#oder

print DATEI "@Schueler";

close(DATEI);
Linuxer
 2008-02-21 23:24
#106204 #106204
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

hier ein Schnellschuß, basierend auf der Idee von n4cer aus dem Perlboard (wo ich diesen Vorschlag auch noch posten werde)...


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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/perl
# vi: set ts=4 sw=4 sts=2 et:
use strict;
use warnings;

# Author:   linuxer
# Date:      21. February 2008

# Description:
#   einfache schueler verwaltung
#
# http://board.perl-community.de/thread/11343/#MSG0
# http://www.perlboard.de/cgi-bin/perlboard.pl?action=show_topic&id=9567&ant=2

#> global variables (the less you use, the better the script)
#> --------------------------------------------------------------------------

our $VERSION = '0.01';

my $datafile = 'daten.txt';

#> sub routines
#> --------------------------------------------------------------------------

# define any used sub routine before main()


# Subroutine: lese Daten aus Datei und liefere Daten in einem Hash-of-Hash zurueck
sub read_data_to_hash {
    my $filename = shift;
    my %schueler = ();

    # 3-argument-open ist sicherer; $! enthaelt die Systemfehlermeldung
    open my $readh, '<', $filename or die "open(ro) $filename: $!\n";

    # zeilenweise lesen
    while ( my $line = <$readh> ) {
        # am Tab splitten; nur in 3 Felder splitten
        my ($name, $ort, $note ) = split /\t/, $line, 3;

        # in hash eintragen
        $schueler{$name} = {
            'ort'  => $ort,
            'note' => $note,
        };
    }

    close $readh or die "close(ro) $filename: $!\n";

    return %schueler;
}

#> main script
#> --------------------------------------------------------------------------

# neu einzutragender schueler... (sollte optimiert werden)
my $name = 'Fritz';
my $ort  = 'Musterhausen';
my $note = 2;

# datei auslesen und Hash %schueler fuellen
my %schueler = read_data_to_hash( $datafile );

# wenn wir den Schueler $name noch nicht kennen,
# dann haengen wir die Daten ans Dateiende
if ( !exists $schueler{$name} ) {

    # schreiben daten ans Dateiende
    open my $writeh, '>>', $datafile or die "open(wr) $datafile: $!\n";
    printf {$writeh} "%s\t%s\t%s\n", $name, $ort, $note
        or die "print to $datafile: $!\n";
    close $writeh or die "close(wr) $datafile: $!\n";
}
#

__END__
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
murphy
 2008-02-21 23:46
#106205 #106205
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ich würde für so eine Anwendung ja CPAN:DBD::CSV benutzen – dann kann man später auch problemlos auf eine richtige Datenbank umstellen.
When C++ is your hammer, every problem looks like your thumb.
Ronnie
 2008-02-22 01:05
#106210 #106210
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hallo Linuxer,
Linuxer+2008-02-21 22:24:51--
hier ein Schnellschuß, basierend auf der Idee von n4cer aus dem Perlboard (wo ich diesen Vorschlag auch noch posten werde)...

richte Markus einen Gruß von mir aus. Ist irgendwie auch ein EDV-Urgestein, seit Amiga-Zeiten dabei.

Gruß,
Ronnie
GwenDragon
 2008-02-22 17:36
#106258 #106258
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Dann will ich auch mal meinen Senf dazugeben, wenn mich das Chrischi auch nicht angesprochen hat. Nich, dass es heißt, die Perlen hier wären blond ;)

CPAN:DBD::CSV ist nicht besonders schnell, hat aber den Vorteil einer eingeschränkten SQL-Sprache.
Ein Nachteil ist, dass CSV keine distinkten Datentypen kennt. NULL gibt es zum Beispiel nicht. Einschränkungen bezüglich Datentypen


Es gäbe auch noch CPAN:DBD::Sprite. Das gleich gilt wie bei DBD::CSV bezüglich Geschwindigkeit.
Einschränkungen bezüglich Datentypen


Solange die Textdatenbanken nicht zu groß werden, ist das ok.
<< >> 5 Einträge, 1 Seite



View all threads created 2008-02-21 22:41.