Tabelle einlesen
TED116
- perl
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
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
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--->
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:
B1: ($teil1, $teil2) = split(/\t/,$zeile,2);
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!!!