Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6661[/thread]

CSV 2 XML Datenkonverter: Perlprogramm, dass CSV zu XML umwandelt



<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten
Gast Gast
 2005-01-25 10:39
#51257 #51257
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-->
esskar
 2005-01-25 11:10
#51258 #51258
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
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-->
format_c
 2005-01-25 11:11
#51259 #51259
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Blöd, dass du nicht CPAN: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
crypt0
 2005-01-25 11:17
#51260 #51260
User since
2005-01-25
23 Artikel
BenutzerIn
[default_avatar]
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.
renee
 2005-01-25 11:37
#51261 #51261
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Probier mal:
Code: (dl )
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-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
crypt0
 2005-01-25 11:49
#51262 #51262
User since
2005-01-25
23 Artikel
BenutzerIn
[default_avatar]
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
renee
 2005-01-25 11:54
#51263 #51263
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das muss heißen:
Code: (dl )
 my $dbh = DBI->connect("DBI:CSV:csv_sep_char=\\;") or die $DBI::errstr;


Habe ich eben auch oben verbessert...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
crypt0
 2005-01-25 11:56
#51264 #51264
User since
2005-01-25
23 Artikel
BenutzerIn
[default_avatar]
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
renee
 2005-01-25 11:57
#51265 #51265
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Jepp, dann scheinst Du wohl ein Fehlerhaft installiertes DBD::CSV zu haben...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
crypt0
 2005-01-25 12:14
#51266 #51266
User since
2005-01-25
23 Artikel
BenutzerIn
[default_avatar]
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?
<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten



View all threads created 2005-01-25 10:39.