3 Stimmen

Kann man Array-Elemente verwenden, wenn man eine neue Zeile zu einer CSV-Datei hinzufügt?

Ich schreibe ein Perl-Skript und verwende die Klasse::CSV Modul. Ich habe ein Array von Zahlen, 5 Elemente lang

$values[0] - $values[4]

Ich versuche, eine neue Zeile in die CSV-Datei einzufügen und die neue Zeile mit den Werten aus dem Array zu füllen. Ich erhalte jedoch immer wieder diese Fehlermeldung, wenn ich versuche, das Skript auszuführen:

 Failed to create CSV line from line:
 10252205 
 at /usr/lib/perl5/site_perl/5.8.8/Class/CSV.pm line 257
    Class::CSV::Line::string('Class::CSV::Line=HASH(0x1f2d0f20)') called at /usr/lib/perl5/site_perl/5.8.8/Class/CSV.pm line 435
    Class::CSV::string('Class::CSV=HASH(0x1f2c1c00)') called at catchmailstats.pl line 116

Hier ist der Code für die CSV-Konstruktion:

# Create csv file from the current data
  my $csv = Class::CSV->new(
  fields  => [qw/Month NotSpam Probable Quarantine Spam Total/],
  );

# Creates the first row (Headers)
$csv->add_line({
  Month   => 'Month',
  NotSpam => 'NotSpam',
  Probable => 'Probable',
  Quarantine => 'Quarantine',
  Spam => 'Spam',
  Total => 'Total'
});

# Creates the second row (values)
$csv->add_line([$values[0], $values[1],$values[2],$values[3],$values[4], $total]);

Ich habe es auch mit dem anderen Notationsstil versucht:

# Creates the second row (values)
$csv->add_line({
  Month   => $values[0],
  NotSpam => $values[1],
  Probable => $values[2],
  Quarantine => $values[3],
  Spam => $values[4],
  Total => $total
});

Keiner der beiden Stile hat funktioniert. Allerdings ist mir etwas aufgefallen. Die letzte Variable, $total, ist die Summe von $values[1] bis $values[4]. Diese Variable funktioniert einwandfrei.

Also meine eigentliche Frage ist: Warum wird nicht Verweise auf Elemente in meinem Array Arbeit, aber eine Summierung von Elementen aus dem gleichen Array, ohne ein Problem kompilieren? Und wie kann ich die Funktion add_line dazu bringen, meine Array-Elemente zu akzeptieren?

0 Stimmen

Mein Fehler. $Werte[1]. Ich habe die Änderung vorgenommen.

1voto

Gilles Quenot Punkte 153339

Ich glaube, in Ihrer Werteliste gibt es eine HASH REF die dereferenziert werden muss.

Verwenden Sie Data::Dumper in Ihrem Code:

use Data::Dumper;
print Dumper @values;

Und POST die Ausgabe, werden wir sehen.

0 Stimmen

Hier ist die Ausgabe von print Dumper @values: $VAR1 = '2012-05 '; $VAR2 = ' 10252205 '; $VAR3 = ' 62192 '; $VAR4 = ' 55995 '; $VAR5 = ' 3797710 ';

0 Stimmen

Ich glaube, Sie sind auf der richtigen Spur, Sputnick. $summe hat keine einfachen Anführungszeichen um den Wert: $VAR1 = '2012-05 '; $VAR2 = ' 10252205 '; $VAR3 = ' 62192 '; $VAR4 = ' 55995 '; $VAR5 = ' 3797710 '; $VAR1 = 14168102; Der letzte $VAR1 ist $summe.

0 Stimmen

Können Sie das für jeden Wert tun? print ref($_), "\n" for ($values[0], $values[1],$values[2],$values[3],$values[4], $total);

0voto

Matthew Lock Punkte 12498

Ich hatte diesen Fehler einfach deshalb, weil ich ein neues Zeilenzeichen in einem der Werte in add_line hatte.

So gehen Sie mit einem Zeilenumbruch in Ihren Werten um http://search.cpan.org/~hmbrand/Text-CSV_XS-1.18/CSV_XS.pm#Embedded_newlines

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X