Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Perl/CGI » liste bearbeiten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.07.2003, 18:41 Uhr
worst_case



Hallo,

ich möchte eine Liste schreiben in der z.B. 3 Dateinahmen stehen.
Diese Dateien sollen alle geöffnet werden und verschiedenen variablen zugeordnet werden.
So eine Art Matrix

zeile[1][2] = Die 1. zeile aus der 2. Datei osä.

Wer kann helfen ?
Danke
worst_case
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.07.2003, 19:20 Uhr
virtual
Sexiest Bit alive
(Operator)


Wenn Du nicht so gerne mit Referenzen arbeitest, dann zB so:

Code:
# Liste der Dateinamen
@dateiname = qw (a.cpp b.cpp c.cpp d.cpp);

# Alle Dateien einlesen
foreach (@dateiname)
{
    open DATEI, "<$_" or die "cannot open $_: $!";
    @lines = <DATEI>;
    $dateiinhalt{$_} = join('', @lines);
}

# Die jeweils 3. zeile jeder Datei ausgeben
foreach (keys %dateiinhalt)
{
    print "3. Zeile von $_:\n";
    @lines = split(/\n/, $dateiinhalt{$_});
    print $lines[2], "\n";
}


Ansonsten mußt Du auf das join verzeichten und im Hash %dateiinhalt eine Reference auf @lines halten. Dann kannst Du Dir das Split sparen
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.07.2003, 11:31 Uhr
worst_case



Hi virtual,

ich komm da noch nicht ganz klar. Ich will nun bestimmte Variablen (Zeilen aus den Dateien) in mein altes (bestehendes)Prog (früher nur eine Datei) einbinden, die da lautet:


Code:
print $file $stunde.":".$minute." Uhr , ".$value[1]." , "
     .$value[5]." , ".$value[6]." , ".$value[7]." , ".$value[0]."\n";


(in value steht der Dateinihalt)

Und so sollte, oder ähnlich, sollte....wenn irgend möglich, die Sache dann aussehen.

Code:
print $file $stunde.":".$minute." Uhr , ".$value[2][1]." , "
     .$value[1][5]." , ".$value[2][6]." , ".$value[3][0]."\n";


Die erste Zahl ist die Dateinummer 1(0)..x (Liste)
und die zweite die Zeilennummer 1(0)...x

Ist so etwas einfach möglich... ??

Danke
worst_case

Dieser Post wurde am 06.07.2003 um 11:40 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.07.2003, 13:40 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja, das ist möglich, Du musst Dann halt mit Referenzen arbeiten Folgender Code zeigt wie:

Code:
@files = qw(/etc/passwd /etc/group);

# Dateien einlesen
foreach (@files)
{
    # Wir lesen die Datei in ein temp. Array ein
    open FILE,"<$_" or die "cannot read $_: $!";
    my @lines = <FILE>;
    close FILE;

    # Im array values merken wir uns eine Reference auf dieses
    # Array
    $values[$file_count++] = \ @lines;
}

# gebe die ersten 10 Zeieln der beiden Dateien aus. $values[$datei][$zeile] gibt
# $zeile -te Zeile von Datei mit Index $datei aus.
for($i=0; $i<$file_count; $i++)
{
    print 'Datei ' . ($i+1) . ":\n";
    for($j=0; $j<10; $j++)
    {
        print $values[$i][$j];
    }
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.07.2003, 20:47 Uhr
worst_case



Hallo virtual,

funkt super....besten Dank

worst_case
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.07.2003, 08:10 Uhr
worst_case



Hallo virtual,

leider funkt mein Prog doch nicht so richtig.
Als Ausgabe erhalte ich nur Daten der 3. Datei.


Code:
   for (;;)      
        {
        $file_count = 0;

            foreach (@datafiles)
                {
                    open ($file , "<".$datapath."$_") || die "$datapath.$_ konnte im Script '$0' nicht geoeffnet werden";
              @lines = <$file>;
                    close ($file);

             # Im Array "values" steht die Referenz auf dieses Array "lines"
                    $values[$file_count++] = \ @lines;
            }
            

               open ($file , ">".$pathnamealert_data) || die "$pathnamealert_data konnte im Script '$0' nicht geoffnet werden";
                  
# Die Dateien und Daten beginnen bei "0"

           print $file  $values[0][0].
                                $values[1][0].
                $values[2][0].
                $values[0][1].
                $values[1][1].
                $values[2][1];
                                  
           close ($file);

# Wartezeit 1 Sekunden

        sleep (1);
        }
        exit;


Danke
worst_case

PS: was bedeutet eigentlich das "qw" vor deiner Liste ?

Dieser Post wurde am 07.07.2003 um 13:41 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.07.2003, 20:18 Uhr
virtual
Sexiest Bit alive
(Operator)


Du sollest vor
Code:
@lines = <$file>
das my nicht vergessen, wie in meinem Code. Denn sonst ist das Array global und nicht lokal und du bekommst immer die gleiche Referenz auf das globale Handle.

qw bedeutet "Quote Words", dh

Code:
qw( a b c)


ist gleichbedeutend mit

Code:
('a', 'b', 'c')


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.07.2003, 20:31 Uhr
worst_case



Abend,

wunderbar, es geht. Wie du richtig vermutet hast habe ich den Speicher global deklariert.

Danke
worst_case
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Perl/CGI ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: