TED116: Tabelle einlesen

Hallöle,

bei mir hat sich mal wieder eine weitere Frage aufgetan.

Ich möchte in meinem cgi-Programm eine Exel Tabelle einlesen, welche ich in eine *.txt Datei umgewandelt habe, da ich nicht weiß, ob Perl eine *.xls Datei einlesen kann.

Auf jeden Fall sieht die Datei dann folgendermaßen aus:
Herr Muster Musterstr. 56 65544 Ort
Herr Test               Teststr. 67 78966 Ort6

In meinem Programm sieht der entsprechende Ausschnitt folgendermaßen aus:
@Zeilen = ("");
  open(adressen, "<c:/test.txt")";
  while(<adressen>)
   {
    push(@Zeilen,$_);
   }
  close(adressen);

Dies ist auch o.k.
Problem ist nur, daß jede Zeile in $Zeile[$i] eingelesen ist.
Nun würde ich noch gerne die Zeile unterteilen, also
$V[0]    Herr Muster
$V[1]    Musterstr. 56
$V[2]    65544
$V[3]    Ort

Leider blick ich durch die 'split-Technik' noch nicht so durch.
Ich möchte nach jedem Tabulator, nicht nach jedem Leerzeichen die Zeile teilen.
Welche Parameter muß ich da benutzen???? /s??

Hoffe auf Hilfe!!

TED116

  1. Hi!

    Excel-Datei "speichern unter" CSV (Trennzeichen getrennt).

    Dann hast du eine csv-Datei, die Ihre einzelen Elemente innerhalb einer Zeile mit einem Semikolon trennt.
    Dann klappt es auch mit split.

    gruß
    Jörg

  2. Moin,

    Ich möchte in meinem cgi-Programm eine Exel Tabelle einlesen, welche ich in eine *.txt Datei umgewandelt habe, da ich nicht weiß, ob Perl eine *.xls Datei einlesen kann.

    »»

    *.xls Dateien kann PERL mit OLE lesen:

    ---schnipp--->

    Script liest eine Exceltabelle aus und zeigt den Inhalt im Browser

    Script geschrieben von Rolf Rost am Samstag, 13. März 1999

    use strict;
    use Win32::OLE qw(in with);
    use Win32::OLE::Const 'Microsoft Excel';
    $Win32::OLE::Warn = 3;

    my $Excel = Win32::OLE->GetActiveObject('Excel.Application') Win32::OLE->new('Excel.Application', 'Quit');
    my $Book = $Excel->Workbooks->Open('d:\abase\adres.xls');
    my $Sheet = $Book->Worksheets(1);
    my $array = $Sheet->Range('B2:G54')->{'Value'};
    $Book->Close;

    print <<EOHTML;
    content-type:text/html\n\n
    <HTML><HEAD>
    <TITLE>Meine Privatadressen</TITLE>
    </HEAD><BODY BGCOLOR='#FFFFE6'>
    <h3><u>Meine Privatadressen</u></h3>
    EOHTML

    print "<table border=1 align=center cellspacing=0>\n";
    print "<tr bgcolor=silver>
    <th>Name</th>
    <th>Vorname</th>
    <th>Straße</th>
    <th>PLZ</th>
    <th>Ort</th>
    <th>Telefon</th>
    </tr>";
    foreach my $ref_array (@$array){
    print "<tr>\n";
    foreach my $scalar (@$ref_array){
      if($scalar){
       print "<td><font color=blue>$scalar</font></td>\n";
      }
      else{
       print "<td><font color=red>Nicht angegeben</font></td>\n";
      }
    }
    print "</tr>\n";
    }
    print "</table>\n
    </body></html>";
    <---schnapp---evntl.überarbeitungsbedürftig---<

    Leider blick ich durch die 'split-Technik' noch nicht so durch.
    Ich möchte nach jedem Tabulator, nicht nach jedem Leerzeichen die Zeile teilen.
    Welche Parameter muß ich da benutzen???? /s??

    Hoffe auf Hilfe!!

    TED116

    hmm, split....nach Tabulator? könnte so gehen:

    splittet in 2 Teile nach den ersten beiden Tabs

    B1: ($teil1, $teil2) = split(/\t/,$zeile,2);

    splittet in 3 Teile nach den ersten 3 Tabs

    B2: ($teil1, $teil2, $teil3) = split (/\t/,$zeile);
    B3:
    Die Datei: rolf otto ulla # Tab-getrennte Einträge
    Das Script:
    open (ROLF, "rolf.txt");
    @rolf = <ROLF>;
    close (ROLF);
    for (@rolf){
    ($teil1, $teil2, $teil3) = split (/\t/,$_,3);
    print "$teil1 $teil2 $teil3\n";
    }

    In der Hoffnung, dass nun alles klar ist :-)

    Viele Grüße, Rolf

    PS: Das Meiste zu PERL findest Du hier auf diesem Server!!!