Utilisation de la fonction chop en perl

Résolu
VivoBaggio Messages postés 141 Statut Membre -  
VivoBaggio Messages postés 141 Statut Membre -
Bonsoir,

J'aimerais savoir comment utiliser la fonction chop dans une création d'un fichier csv à partir d'un exel. J'ai un vingtaine de colonnes dans mon excel. Et dans 2 colonnes, il y a des champs qui sont remplis avec un retour charriot en plein milieu du champ. J'aimerais savoir comment j'utilise ma fonction chop pour que dans le csv, chaque ligne commence par le même champ.

Extrait du code du parcours du fichier excel et de l'écriture dans le csv.

foreach my $row (2 ... 166)
{
my $cell1 = $sheet->{Cells}[$row][0];
my $cell2 = $sheet->{Cells}[$row][1];
my $cell3 = $sheet->{Cells}[$row][2];
my $cell4 = $sheet->{Cells}[$row][3];
my $cell5 = $sheet->{Cells}[$row][4];
# Ecriture dans le fichier .csv
print F "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};\n";
}

Merci d'avance de votre aide.
Configuration: Windows XP
Firefox 2.0.0.7

7 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Ca marche la solution du blux, mais elles est testé sous Linux

    essaie ce code
    donc avant d'écrire dans le fichier je traite la ligne
    #!/usr/bin/perl
    use strict;use warnings;
    use Spreadsheet::ParseExcel;
    
    open F,">>resultat.csv"
        or die "E/S : $!\n";
    
    my $file = "Test.xls";
    my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file);
    my $sheet = ${$excel->{Worksheet}}[0];
    
    foreach my $row (0 ... 4{
      my $cell1 = $sheet->{Cells}[$row][0];
      my $cell2 = $sheet->{Cells}[$row][1];
      my $cell3 = $sheet->{Cells}[$row][2];
      my $cell4 = $sheet->{Cells}[$row][3];
      my $cell5 = $sheet->{Cells}[$row][4];
    
      my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};";
      $res =~s/\n//;
      print F "$res\n";
    }
    __END__
    
    1
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    la fonction chop supprime le dernière caractère d'une chaîne et retourne le caractère supprimé
    ce n'est pas ça qu'il te faut

    chaque ligne commence par le même champ.
    affiche ici le résultat une partie de ton csv pour voir, puisque je ne comprends pas ce que tu veux obtenir

    0
  3. VivoBaggio Messages postés 141 Statut Membre
     
    Alors je t'ai mis un extrait du csv. Chaque ligne doit commencer par SU1107, et comme tu peux le voir, à la ligne 3 et 4, il y a un retour charriot en plein milieu du champ. Comment l'enlever ? Merci

    SU1107;6;ECLAIRAGE ELECTRICITE;071115609;Piles alcalines ultra M3 LR6 x 4, LR6 x 8,;
    SU1107;7;PARFUMERIE;071115179;Lames Mach3;
    SU1107;8;PARFUMERIE;071115181;Le pot ou le tube de 50 ml
    (Variétés au choix);
    SU1107;9;PARFUMERIE;071115180;L'atomiseur de 200 ml
    (Variétés au choix);
    SU1107;10;PARFUMERIE;071115182;Dentifrice isioactive menthe fraîche ou;
    0
  4. blux Messages postés 2060 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    un truc comme ça (non testé) :

    $ligne =~ s/\n/ /;
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    le fichier viens du monde windows
    il faut savoir du quel caractère s'agit'il
    il pourrait être un CR ou CRLF et pas un LF

    envoie le fichier (mais d'aborde compresse le) par mail

    la commande du blux tu peux l'essayer mais il y a le risque d'avoir des surprises
    il faut plutot faire un test pour sur les lignes et remplacer le caractère que pour les lignes qui ne se finissent pas avec ;

    0
  7. VivoBaggio Messages postés 141 Statut Membre
     
    Il s'agit d'un CRLF à chaque fin de ligne.

    Sinon lami20j, je t'ai envoyer l'extrait de fichier sur ta boite mail, nommé "Test.csv", avec le fichier "Test.xls", dans une archive "Test.rar"
    0
  8. VivoBaggio Messages postés 141 Statut Membre
     
    Merci les amis pour votre aide, ça marche. Mais j'ai une dernière requête sur ce travail que je mets dans une nouvelle discussion.
    0