Hallo,
also ich hab die tolle Aufgabe bekommen einen Konverter von CSV in XML zu programmieren. Leider bin ich erst seit 3 Wochen in sachen Perl unterwegs und hab net so wirklich den Plan davon. Wäre nett, wenn mir hier jm unter die Arme greifen könnte.
Das Skript soll die Standard-Perlmodule, die bei aktivestateperl mitinstalliert werden, verwenden, also das Modul XMLwritter und CSV.
Danke schonmal im Vorraus\n\n
<!--EDIT|esskar|1106643854-->
User since
2003-08-04
7321
Artikel
ModeratorIn
annahme du hast in deiner csv datei folgende spalten
spalte1;spalte2;spalte3
und diesen inhalt
eine;alte;dumme;
gans;la;li;
lu;nur;der;
mann;im;mond
dann könnte deine XML so aussehen
<?xml version="1.0" encoding="ISO-8859-1"?>
<csv_records>
<csv_record>
<spalte1>eine</spalte1>
<spalte2>alte</spalte2>
<spalte3>dumme</spalte3>
</csv_record>
<csv_record>
<spalte1>gans</spalte1>
<spalte2>la</spalte2>
<spalte3>li</spalte3>
</csv_record>
<csv_record>
<spalte1>lu</spalte1>
<spalte2>nur</spalte2>
<spalte3>der</spalte3>
</csv_record>
<csv_record>
<spalte1>mann</spalte1>
<spalte2>im</spalte2>
<spalte3>mond</spalte3>
</csv_record>
</csv_records>
den rest kannst du dir mal in aller ruhe in der doku der module anschauen....\n\n
<!--EDIT|esskar|1106644244-->
User since
2003-08-04
1706
Artikel
HausmeisterIn
Blöd, dass du nicht
XML::CSV verwenden darfst.
Also bei meinem Active Perl ist nichts für CSV dabei. Einfacher als XML::Writer finde ich XML::Simple wie der Name schon sagt.
Da musst du wohl noch ein Modul nachinstallieren, (warum nicht gleich XML::CSV) wie Text::CSV die Datei parsen und mittels XML::Simple als XML Datei speichern. Wenn du gar nichts installieren darfst, musst du wohl die CSV-Datei manuell parsen, was evtl. steinig werden kann.
Gruß Alex
User since
2005-01-25
23
Artikel
BenutzerIn
Leider kann ich nichts installieren da ich nur begrenzte zugriffsrechte habe. Und da das Programm später mal bei jedem funktionieren soll hilfts auch nix mir die nötigen rechte zu besorgen ...
also hab activestate version
5.6.1.631
da liegt unter
activestate\activeperl\site\lib\dbd ein CSV modul (wobei ich nicht weiss ob dieses Modul mit hilft weil es irgendwie mit Datenbanken zu tun hat...)
und
\activestate\activeperl\site\lib\xml\handler der XMLWritter
mehr gibts halt nicht und kann ich auch nicht installieren.
User since
2003-08-04
14371
Artikel
ModeratorIn
Probier mal:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#! /usr/bin/perl
use strict;
use warnings;
use DBI;
use XML::Writer;
use IO::File;
my $output = new IO::File(">output.xml");
my $writer = new XML::Writer(OUTPUT => $output);
my $dbh = DBI->connect("DBI:CSV:csv_sep_char=\\;") or die $DBI::errstr;
$dbh->{'csv_tables'}->{'info'} = { 'file' => 'info.csv'};
my $sth = $dbh->prepare("SELECT * FROM info");
$sth->execute();
my @names = @{$sth->{NAME}};
while(my @row = $sth->fetchrow_array()){
for(0..$#names){
$writer->startTag($names[$_]);
$writer->characters($row[$_]);
$writer->endTag($names[$_]);
}
}
$sth->finish();
$dbh->disconnect();
$writer->end();
$output->close();
\n\n
<!--EDIT|renee|1106646459-->
User since
2005-01-25
23
Artikel
BenutzerIn
Hab die einbindung des XMLWritters mal abgeändert auf
XML::Handler::XMLWriter
aber jetzt bekomm ich flogenden fehler:
Can't connect(DBD:CSV:csv_sep_char=\; ), no database driver specified and DBI_DSN
env var not set at laufwerk:\Verzeichniss\dateiname.pl line 12
User since
2003-08-04
14371
Artikel
ModeratorIn
Das muss heißen:
my $dbh = DBI->connect("DBI:CSV:csv_sep_char=\\;") or die $DBI::errstr;
Habe ich eben auch oben verbessert...
User since
2005-01-25
23
Artikel
BenutzerIn
install_driver(CSV) failed: Can't locate Text/CSV_XS.pm in @INC (@INC contains:
C:/*/activestate/activeperl/lib C:/*/activestate/activep
erl/site/lib .) at C:/*/activestate/activeperl/site/lib/DBD/CSV.pm l
ine 47.
BEGIN failed--compilation aborted at C:/*/activestate/activeperl/sit
e/lib/DBD/CSV.pm line 47.
Compilation failed in require at (eval 1) line 3.
Perhaps a module that DBD::CSV requires hasn't been fully installed
User since
2003-08-04
14371
Artikel
ModeratorIn
Jepp, dann scheinst Du wohl ein Fehlerhaft installiertes DBD::CSV zu haben...
User since
2005-01-25
23
Artikel
BenutzerIn
also habs nochmal neu installiert aber das ändert irgednwie auch nix. dann hab ich das CSV modul mal so eingebunden use DBD::CSV;
aber das ändert nicht viel
Can't locate Text/CSV_XS.pm in @INC (@INC contains: C:/*/activestate
/activeperl/lib C:/*/activestate/activeperl/site/lib .) at C:/*/activestate/activeperl/site/lib/DBD/CSV.pm line 47.
BEGIN failed--compilation aborted at C:/*/activestate/activeperl/sit
e/lib/DBD/CSV.pm line 47.
Compilation failed in require at ***.pl line 6.
BEGIN failed--compilation aborted at ***.pl line 6.
gibts eine andere möglichkeit?