perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 14
Click for quality!




12.02.2012 / 02:43

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragCSV-Datei lesen und zwei ASCII-Dateien schreiben
Seitenanfang
Ich wird noch bekloppt. Ich habe eigentlich ein einfaches Problem ich krieg’s aber einfach nicht gelöst:

Ich habe eine CSV Datei mit folgenden Aufbau:


Index;1#I [mA];2#I [mA]
0;-5,598829997;16,11789035
1;-6,464529004;16,15676469
2;-7,3289005;16,15664972
3;-8,15512162;16,1055859
4;-8,989964346;16,02810204
5;-9,792971332;15,91603248
6;-10,57633566;15,76240482
7;-11,34256758;15,58426151
8;-12,08163658;15,36207404
9;-12,78981106;15,11913797
10;-13,45453543;14,83641459
11;-14,07102795;14,53418274

Ich möchte al Ergebnis folgendes haben eine Datei in dem nur die Überschriften untereinander stehen:


Index
1#I [mA]
2#I [mA]

Das habe ich mit dem Modul Tie::Handle::CSV hingebracht.
Nun wird’s schwierig.
Ich möchte nun die einzelnen Werte in den Spalten (ohne Überschrift) in einer neuen Datei untereinander weg schreiben. Wie hier:


0
1
2
3
4
5
6
7
8
9
10
11
-5,598829997
-6,464529004
-7,3289005
-8,15512162
-8,989964346
-9,792971332
-10,57633566
-11,34256758
-12,08163658
-12,78981106
-13,45453543
-14,07102795
16,11789035
16,15676469
16,15664972
16,1055859
16,02810204
15,91603248
15,76240482
15,58426151
15,36207404
15,11913797
14,83641459
14,53418274

Und genau da liegt mein Problem ich schaffe es troz mehreren Versuchen einfach nicht ! ;(
Die schweirigkeit ist das Programm soll CSV Dateien mit unterschiedlicher Anzahl an Spalten und unterschiedlichen Überschriften verarbeiten können!

Kann mir jemand weiterhelfen!?

Es darf natürlich gerne auch ein anderes CSV Modul verwendet werden.

Ich habs auch mit
DBD::CSV und Text::CSV versucht. Hatte dort aber die gleichen Probleme!

Gruß, goehte

Datum: 11.11.2008-16:59

Beitragre: CSV-Datei lesen und zwei ASCII-Dateien schreiben
Seitenanfang
Ich habe es selbst gelöst:

#!/usr/bin/perl -w
use strict;
use warnings;
use Text::CSV;

my $csvfile = 'csvdata.txt';
my $datfile = 'outputdat.txt';
my $ascfile = 'outputasc.txt';

my @heads;

my $cnt_columns;
my $cnt_csvdata;

my $csv = Text::CSV->new({sep_char => ';'});

open (CSV, "<", $csvfile) or die $!;
my @csv_data = <CSV>;
close CSV;

$cnt_csvdata = scalar(@csv_data);

if ($csv->parse($csv_data[0])) {
my @columns = $csv->fields();
$cnt_columns = scalar(@columns);
@heads = @columns;
} else {
my $err = $csv->error_input;
print "Failed to parse line: $err";
}
open (DAT, ">", $datfile) or die $!;
foreach my $head (@heads) {
my $name = "Undef";
my $unit = "-";
$head =~ m/^([A-z0-9#]+)( .*\[([A-z]+)\]|$)/;
if($1){ $name = $1 };
if($3){ $unit = $3 };
print "$head = Name: $name, Unit: $unit \n";
print DAT "$head = Name: $name, Unit: $unit \n";
}
print "Write $datfile OK\n";
close DAT;

open (ASC, ">", $ascfile) or die $!;

for(my $i = 0; $i < $cnt_columns; $i++) {
for(my $j = 1; $j < $cnt_csvdata; $j++) {

if ($csv->parse($csv_data[$j])) {
my @columns = $csv->fields();
print ASC "$columns[$i]\n";
} else {
my $err = $csv->error_input;
print "Failed to parse line: $err";
}

}
}
print "Write $ascfile OK\n";
close ASC;

exit(0);

Datum: 12.11.2008-01:12

-






-
-