perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 29
Click for quality!




11.02.2012 / 17:02

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragProjekt: Schülerverwaltung
Seitenanfang

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)

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);

Datum: 21.02.2008-21:41

Beitragre: Projekt: Schülerverwaltung
Seitenanfang
Antworten findest Du hier: http://board.perl-community.de/thread/11343/#MSG3

Datum: 22.02.2008-12:57

Beitragre: Projekt: Schülerverwaltung
Seitenanfang
Also ich hab jetzt den oben gegebenen Code genommen und eingebunden. Es funktioniert noch nicht ganz, ich denke der Fehler liegt weiter unten beim Ausgeben der geänderten Daten in eine genau bestimmte Zeile der Textdatei. Soweit mein Programm:


#!/usr/bin/perl -w

use warnings;

my $datafile = '/samba/daten.txt';
my $dev = "/dev/sda9";

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

# 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 "Datei konnte nicht geoeffnet werden\n";

# zeilenweise lesen
while ( my $line = <$readh> )
{
# am Tab splitten; nur in 5 Felder splitten
my ($zeile_name, $zeile_uid, $zeile_info, $zeile_speicher, $zeile_belegt ) = split /\t/, $line, 5;

# in hash eintragen
$schueler{$zeile_name} =
{
'uid' => $zeile_uid,
'info' => $zeile_info,
'speicher' => $zeile_speicher,
'belegt' => $zeile_belegt,
};
}

close $readh or die "Datei konnte nicht geschlossen werden\n";

return %schueler;
}

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

# neu einzutragender schueler... (sollte optimiert werden)
my $name = $ARGV[0];
my $uid = getpwnam("$ARGV[0]");

my $default_info = 0;
my $default_speicher = 0;
my $default_belegt = 0;

if($uid)
{

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

# wenn Schueler noch nicht existiert wird er am Dateiende angelegt
if ( !exists $schueler{$name} )
{
# schreiben daten ans Dateiende
open my $writeh, '>>', $datafile or die "Datei konnte nicht geoeffnet werden\n";
printf {$writeh} "%s\t%s\t%s\t%s\t%s\n", $name, $uid, $default_info, $default_speicher, $default_belegt
or die "Fehler beim Schreiben\n";
close $writeh or die "Datei konnte nicht geschlossen werden\n";
print "Zeige: Infos fuer Homes - Benutzer" . "\n";
}
# Die Quota-Informationen des Benutzers werden ermittelt und in die entsprechenen Variablen geschieben
#($bc,$bs,$bh,$bt,$ic,%is,%ih,$it) = Quota::query($dev,$uid) # $kind ???
my $bc = "95";

if($bc>"90")
{
$schueler{$name}{'speicher'} = 1;
print "Zeige: Homes-Laufwerk voll! Belegter Speicher: $bc Bytes" . "\n";
}
$schueler{$name}{'belegt'} = $bc;

open my $writeh, '>>', $datafile or die "Datei konnte nicht geoeffnet werden\n";

while ( my $line = <$writeh> )
{
# am Tab splitten; nur in 5 Felder splitten
my ($zeile_name, $zeile_info, $zeile_speicher, $zeile_belegt ) = split /\t/, $line, 5;

if($zeile_name=$name)
{
printf {$writeh} "%s\t%s\t%s\t%s\t%s", $name, $uid, $schueler{$name}{'info'}, $schueler{$name}{'speicher'}, $schueler{$name}{'belegt'}
or die "Fehler beim Schreiben\n";
}
}
close $writeh or die "Datei konnte nicht geschlossen werden\n";
}

Datum: 26.02.2008-20:57

-






-
-