WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 23.05.2001, 11:38   #1
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Frage Mehrdimensionale (Hash)-Arrays in Perl?

Ich möchte in Perl gerne eine Tabelle aufbauen:
0 a b c d e
1 x x x x x
2 x x x x x
3 x x x x x, wobei x immer ein beliebiger Zahlenwert sein kann.

1.) Sind in Perl mehrdimensionale Arrays möglich?

2.) Wie füge ich z.B. eine Spalte zwischen c und d ein (die Liste wird Zeilenweise aufgebaut, es können aber Spalten dazukommen!)
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Alt 23.05.2001, 14:45   #2
fran
Senior Member
 
Registriert seit: 06.02.2000
Beiträge: 174


Standard

Hallo,
1. soweit mir bekannt ist, kann man mit Perl nicht direkt mehrdimensionale Arrays erstellen.

Es ist aber indirekt möglich - z.B.:

@spalte1 = (a,a1,a2);
@spalte2 = (b,b1,b2);
@matrix = (\@spalte1,\@spalte2);

2. Wenn keine Sortierfunktionen etc. nötig sind, kannst Du einzelne Elemente (in diesem Fall Arrays) mit folgenden Befehlen hinzufügen oder entfernen:

PUSH: am Ende anfügen,
UNSHIFT: am Anfang anfügen,
POP: das letzte Element wird entfernt
SHIFT: das erste Element wird entfernt.

also z.B. eine Spalte zwischen 1 und 2:

pop @matrix;
push(@matrix, @spalteX);
push(@matrix, @spalte2);

Das müsste funktionieren - probiers aus.

grüße fran
____________________________________
-- eof --
fran ist offline   Mit Zitat antworten
Alt 23.05.2001, 15:59   #3
MANX
Inventar
 
Registriert seit: 27.02.2001
Beiträge: 1.967


Standard

Hi!

Mehrdimensionale Arrays sind in Perl kein Problem. Jetzt weiß ich nicht wie du Deine Tabelle aufbauen willst.
Z.B aus einer Textdatei einlesen, wobei jede Zeile einen Datensatz darstellt, die einzelnen Elemente durch z.B. Tabulatoren getrennt:

open (DATEI, "$DATEI") or die "Kann $DATEI nicht öffnen: $!\n";
while (<DATEI>)
{
@temp = split /\t/;
push @daten, [ @temp ];
}
close DATEI;

erstes Element erste Spalte: $daten [0][0]

Über's Spalten einfügen mach' ich mich noch schlau.

MfG

MANX
MANX ist offline   Mit Zitat antworten
Alt 23.05.2001, 16:04   #4
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Standard Problem.!

@fran:

Erstmal danke für die Antwort, aber:

Ich hab leider keine Ahnung, wieviele Spalten und Zeilen ich haben werde - das ist variabel!!!

mfg - Mike
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Alt 23.05.2001, 16:23   #5
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Standard Hintergrund

Der Hintergrund der Sache ist der folgende:

Ich habe mehrere Dateien, in denen etwa folgendes steht:
14.5.01|185|
15.5.01|92|
17.5.01|103|
usw...
Jede Datei repräsentiert eine andere Datei auf meinem Webserver und die Zahlen dahinter sind die Zugriffe.

Jetzt möcht ich aber nicht immer jede Datei extra ansehen sondern auch eine Übersicht (als Tabelle haben):

Datum Seite 1 Seite 2 ...
14.5.01 123 456
15.5.01 856 315 ...
...

Diese dann als HTML auszugeben und eventuell irgendwas zusammenzuzählen ist kein Problem mehr

Das Problem bei der Sache ist nur, dass nicht auf jede Kategorie jeden Tag zugegriffen wird (d.h. ich kann nicht stur einlesen!!!)

Klar?!?! Ich hoffe ich hab rübergebracht, was ich sagen wollte
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Alt 23.05.2001, 19:27   #6
MANX
Inventar
 
Registriert seit: 27.02.2001
Beiträge: 1.967


Standard

Hallo SNo0py!

Ist sicher keine triviale Angelegenheit. Aber so auf die Schnelle ein Vorschlag:
Wenn ich's richtig verstanden habe.
Für jede Webseite eine Datei. -> alle Dateienamen in einer Liste abspeichern -> mit einer foreach-Schleife jede Datei in eine Tabelle einlesen

foreach blabla...
open (DATEI, "$DATEI") or die "Kann $DATEI nicht öffnen: $!\n";
while (<DATEI> )
{
# wir splitten jede Zeile in drei Elemente: Erstes:14.5.01 Zweites:185 Drittes:\n

@temp = split /\|/;
push @daten, [ @temp ];
}
close DATEI;

# wir entfernen das dritte Element jeder Zeile da wir es nicht brauchen

for $i ( 0 .. $#daten )
{
pop @{@daten[$i]}
}

Und dann wird's halt lustig:
Einsortieren: Steht in jeder Datei immer das Datum aufsteigen, oder ist manchmal ein Tag ausgelassen?

Wenn keine Tage fehlen, würde ich das erste Array hernehmen und mit allen anderen das Datum (erstes Element) vergleichen, wenns passt hängst das Element in die Zeile dazu!

Ist ein bisschen konfus geworden aber vielleicht hilft's ja ein bisschen.

MANX
MANX ist offline   Mit Zitat antworten
Alt 23.05.2001, 20:09   #7
fran
Senior Member
 
Registriert seit: 06.02.2000
Beiträge: 174


Standard

@SNo0py:
Tut mir leid, aber da habe ich Dich völlig missverstanden.
D. h. Du hast Zahlen als Datensätze in einzelnen Dateien vorliegen, die Du nun in eine einzige Datei gesammelt haben möchtest - verstehe ich das richtig?

Wenn Du nach Datum sortierst, kannst Du vielleicht zuerst leere Dateien für jeden Tag eines Monats anlegen - und danach das Eingangsdatum der Daten mit jenem der Dateien vergleichen, um sie in die richtige zu schreiben. Danach liest Du alle Daten aus den Einzeldateien in eine Datei ein.

Das ist meine Theorie - bei der Umsetzung, naja... Ich bin auch gerade erst dabei, Perl zu lernen - vielleicht kann ja noch jemand helfen, die Lösung würde mich interessieren.

grüße fran
____________________________________
-- eof --
fran ist offline   Mit Zitat antworten
Alt 27.05.2001, 20:45   #8
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Standard Ich machs anders :-)

Ich versuch es jetzt anders, indem ich das Counting-Script umschreibe und gleich alle Daten in eine Datei schreibe (als Tabelle); die "paar" Daten die ich bis jetzt habe, übernehm ich händisch mit Ultra-Edit in die neue Datei....

Aber falls wer eine Lösung hat, bin ich trotzdem sehr dankbar, da die jetzige Counting-Version schneller ist!
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:26 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag