Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Perl - Daten ausgeben

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.11.2005
    Beiträge
    51

    Perl - Daten ausgeben

    Hallo,

    ich habe mir gerade die Grundkenntnisse in Perl zugelegt
    und versuche mein erstes eigenes kleines "Textverarbeitungs"-Programm.

    Ich habe dabei folgendes kleines Problem
    Ich lese eine Datei, die ich per Argument übergeben habe,
    in einen Stringarray, prinzipiell so
    Code:
    @data=<ARGV[$_]
    Dabei lese ich nur einen bestimmten Teil ein, der per Regularexpressions
    ausgewählt wird und am Ende enthält @data nur Zahlenwerte in vier Spalten.
    Wenn ich die Spalten aber per
    Code:
    print @data
    ausgebe, sind die Spalten nicht ordentlich ausgerichtet,
    würde ich sie aber per "printf" formatieren würde, müßte ich eine Schleife Zeile für Zeile
    schreiben, sehe ich das richtig?

    Also meine Schleife sehe dann so aus, die klappt aber nicht(gibt mir nur die erste Zeile aus und
    beschwert sich mit "printf interpreted as function")
    Code:
    printf (" %2d   %8.5f %8.5f %8.5f\n" , split) foreach($data[0] .. $data[-1]);
    Was ist falsch daran oder gibt es vielleicht auch noch einen schöneren Weg(für Anfänger nachvollziehbar),
    irgendwie empfinde ich die Schleife als nicht so schön?

    Mfg und Danke

    Rahul
    Geändert von RAHUL (07-06-2006 um 15:06 Uhr)

  2. #2
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    Wenn Du statt des voreingestellen Leerzeichens bei der Ausgabe eines Arrays zwischen den Elementen lieber etwas anderes hättest, eines Zeilenumbruch etwa, dann setze einfach:
    $, = "\n";


    mfg
    Molaf

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.11.2005
    Beiträge
    51
    Hallo,

    Danke für die Antwort(wieder einen kleinen Fitzel gelernt ),
    aber das hilft mir nicht weiter, denn mein @data-Array ist ja schon voller Strings,
    die ich je nach Belieben(chomp) mit oder ohne den Zeilenumbruch speichern kann.

    Das Problem ist schon in den eingelesenen Datenstrings,
    deren Datenelemente(unsauber formuliert) nicht ordentlich formatiert sind.

    Ich habe das jetzt mit obiger Schleife hinbekommen,
    wenn ich den Bereich von
    Code:
    $data[0] .. $data[-1]
    auf
    Code:
    @data
    ändere, wobei mir der Unterschied nicht ganz klar ist.

    MfG
    Rahul

  4. #4
    Registrierter Benutzer
    Registriert seit
    11.11.2005
    Beiträge
    51

    Neue Frage

    Hallo,

    weiter mit folgendem Problem,

    Code:
         61     my $ctr=0;
         62     foreach(@Standard)
         63     {
         64         $_=~ s/^.*:new\s*$/\U$ARGV[$arg] :NEW\n/i;
         65         if($ctr==1)
         66         {
         67             printf MSINDO_INP(" %2d   %10.5f %10.5f %10.5f\n", 0, 0.0, 0.0, 0.0);
         68             printf MSINDO_INP(" %2d   %10.5f %10.5f %10.5f\n", split) foreach (@CrystalTmp);
         69         }
         70         $ctr++ if(m/^\s*:End\s*/);
         71         print MSINDO_INP $_;
         72     }
    Kurz zur Erläuterung:
    Ich habe zwei Text-Dateien teilweise eingelesen und möchte die jetzt miteinander in der Datei des Filehandles (MSINDO_INP) verwursten, die Information der beiden Dateien liegen jeweils in den Arrays @Standard und @CrystalTmp vor.

    @Standard zeichnet sich durch mehrere Blöcke aus,
    die durch ein ":End" getrennt werden, in den Block zwischen dem ersten
    und zweiten ":End" soll der Inhalt von @CrystalTmp gefüllt werden(Zeile 65-70).
    Zeile 64 ist unwichtig und verändert nur die Titelzeile in @Standard...

    Das Programm schreibt auch bis zu dem ersten ":End",
    aber dann kommt eine Fehlermeldung, mit der ich nichts anfangen kann.
    Undefined subroutine &main::MSINDO_INP called at ./Test1.pl line 67.
    Kann mir jemand erklären, was da schief geht.
    EDIT:
    Es scheint irgendetwas mit der Funktion printf bei Anwendung auf einen FILEHANDLE
    tun zu haben, aber wie kann ich das beheben?

    Danke

    Rahul
    Geändert von RAHUL (08-06-2006 um 10:45 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    20.06.2005
    Beiträge
    40
    Zitat Zitat von RAHUL
    Undefined subroutine &main::MSINDO_INP called at ./Test1.pl line 67.
    Kann mir jemand erklären, was da schief geht.
    perldoc printf
    Code:
    printf MSINDO_INP(" %2d  ....
    muss so aussehen:
    Code:
    printf MSINDO_INP " %2d ..."
    jetzt eine andere Frage:
    Zitat Zitat von RAHUL
    Code:
    @data=<ARGV[$_]
    gibt es wirklich so eine vereinfachte Syntax um Dateien einzulesen?
    oder meintest du
    Code:
    open(FH, '<', ARGV[$_]);
    @data = <FH>;
    close(FH);
    damit?

    Gruß
    Geändert von mcspam (08-06-2006 um 15:42 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    11.11.2005
    Beiträge
    51
    Hallo,

    ich habe noch mal ein wenig mit "printf" herumprobiert,
    es geht auch mit der Klammer,
    aber es muß ein Leerzeichen nach dem Filehandle eingeschoben werden...

    gibt es wirklich so eine vereinfachte Syntax um Dateien einzulesen?
    oder meintest du ...
    ja, stimmt, ich meinte das so, wie du es geschrieben hast....

    MfG
    Rahul
    Geändert von RAHUL (09-06-2006 um 09:33 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •