2017-01-11 2 views
0

Ich arbeite an einem Skript, das einige Werte von einem Excel-Wert übernimmt und es in einer CSV-Datei protokolliert. Zwischendurch führen wir einige Berechnungen an den Daten durch und protokollieren dann die CSV. Ich füge eine Zeichenfolge an einen Wert von der Excel und speichern Sie es dann in einem Array-Element. Ich benutze Array, um ein Excel-Blatt zu simulieren, um die Ausführungszeit zu sparen und schließlich Werte aus dem Array auszuwählen und sie in CSV zu protokollieren.Doppelte Quotes in einem Wert im CSV-Format erhalten

Aber das Problem, mit dem ich konfrontiert bin, ist diese Werte, die ich für eine Spalte bekomme, wo ich eine Zeichenfolge mit einem Excel-Wert angefügt hat gibt doppelte Anführungszeichen herum. Sie sind nicht sichtbar im Falle der Excel, aber wenn ich diese CSV in Notepad anzeigen ++ Ich bekomme diese.

Ich versuchte zu suchen, aber keinen Grund dafür. Kann jemand helfen.

Bitte einen Referenz-Code unten finden:

$Array_Final[$R_FIN][11] = "Last Invoice : ".$Array_Input_DP_Plan3[$W_R][$C_LI]; 
my $csv = Text::CSV->new ({ binary => 1, eol => "\n" }) # should set binary attribute. 
       or die "Cannot use CSV: ".Text::CSV->error_diag(); 

    open my $fh, ">:encoding(utf8)", $VPath."\\Temp\\".$VCsvFileName; 
    my @log; 
    for my $row(1..$#Array_Final){ 
     #COMMENT:EMPTY THE LOG ARRAY 
     $#log = -1; 
     for my $col(1..42){ 
      if(defined $Array_Final[$row][$col] && $Array_Final[$row][$col] ne ""){ 
       push @log, $Array_Final[$row][$col]; 
      } 
      else{ 
       push @log, undef; 
      } 
     } 
     #print (@log); 
     $csv->print ($fh, \@log); 
    } 
    close $fh or die "new.csv: $!"; 

Die CSV-Linien Ich bin wie diese bekommen:

20161212-001,20170111, DEL, 12,3, A, ABC ,, "Letzte Rechnung: 1111" ,,, DP

Antwort

2

standardmäßig ein Leerzeichen in einem Feld würde Zitat auslösen. Da keine Regel vorhanden ist, die in CSV oder für das Gegenteil erzwungen wird, gilt der Standardwert für die Sicherheit. Sie können den Raum von diesem Trigger ausschließen, indem auf dieses Attribut Einstellung 0 - Text::CSV doc

Deshalb ist es auf 0 gesetzt wird, das Problem für Sie beheben.

$csv->quote_space (0); 

Sie können das auch beim Erstellen des Objekts angeben.

$csv = Text::CSV->new ({ 
      quote_space => 0, 
     }); 
+0

Danke, Chankey hat es genagelt. – Mohit

+0

Dies kann keine Anführungszeichen entfernen, die bereits beim Schreiben der Datei vorhanden sind. Es wird nur nicht hinzugefügt. – zdim

+0

Ja, aber meine Eingabe hatte keine Anführungszeichen, sondern Leerzeichen, die zu Anführungszeichen führten. – Mohit