![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() Registriert seit: 08.02.2000
Beiträge: 1.696
|
![]() 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. |
![]() |
![]() |
![]() |
#2 |
Senior Member
![]() Registriert seit: 06.02.2000
Beiträge: 174
|
![]() 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 -- |
![]() |
![]() |
![]() |
#3 |
Inventar
![]() Registriert seit: 27.02.2001
Beiträge: 1.967
|
![]() 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 |
![]() |
![]() |
![]() |
#4 |
Inventar
![]() Registriert seit: 08.02.2000
Beiträge: 1.696
|
![]() @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. |
![]() |
![]() |
![]() |
#5 |
Inventar
![]() Registriert seit: 08.02.2000
Beiträge: 1.696
|
![]() 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. |
![]() |
![]() |
![]() |
#6 |
Inventar
![]() Registriert seit: 27.02.2001
Beiträge: 1.967
|
![]() 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 |
![]() |
![]() |
![]() |
#7 |
Senior Member
![]() Registriert seit: 06.02.2000
Beiträge: 174
|
![]() @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 -- |
![]() |
![]() |
![]() |
#8 |
Inventar
![]() Registriert seit: 08.02.2000
Beiträge: 1.696
|
![]() 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. |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|