Suppression de caractère dans une col en perl

Résolu/Fermé
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009 - 5 oct. 2007 à 11:19
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009 - 5 oct. 2007 à 15:44
Bonjour,

J'ai découvert une autre subtilité à mon code perl. Dans mon fichier xls, j'ai une colonne qui contient des parenthèses avec des chiffres. Il faut que lors de la conversion en csv, ces parenthèses soient supprimées.

Par ex : ligne 1 : (3)
ligne 2 :
ligne 3 : (2) (3)
Et je dois avoir dans mon csv
ligne 1 : 3
ligne 2 :
ligne 3 : 2,3

Je vous mets sur cjoint.com mon extrait de fichier xls avec mon extrait de fichier csv. Je vous mets également un extrait de fichier csv qu'il faudrait obtenir

https://www.cjoint.com/?kflrssGMyz Fichier Test.xls
https://www.cjoint.com/?kflr0rWDrV Fichier Test1.csv (Fichier à l'heure actuelle)
https://www.cjoint.com/?kflsJdq58n Fichier Test2.csv (Fichier que je voudrais obtenir)

La modif se trouve pour la dernière colonne.

Merci d'avance
A voir également:

10 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
5 oct. 2007 à 11:22
Salut,

mais pour les autres colonnes, s'il y a des paranthèses il faut les supprimés aussi?
0
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009
5 oct. 2007 à 11:35
Non, juste pour cette colonne. Je pense qu'il faut rentrer dans la boucle for.
Et de plus, je l'ai pas précisé, mais quand dans cette colonne j'ai 2 chiffres, ex : (2) (3), je dois avoir 2,3.
Il y a une virgule qui s'y met entre. Sinon, il n'y a que le chiffre quand il est seul
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
5 oct. 2007 à 11:42
tu n'est pas cohérent
ton fichier a cette fois que 4 colonnes
celui d'hier avait plus - 5 il me semble
0
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009
5 oct. 2007 à 12:04
Oui, mais si tu savais le nombre de colonne que j'ai dans mon xls, tu péterais un cable. C'est pour ca que je l'ai réduit.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
5 oct. 2007 à 12:16
Oui, mais si tu savais le nombre de colonne que j'ai dans mon xls, tu péterais un cable.
tu crois?!
il me faut plus de 256 colonnes pour pêté mes cables et Excel ne peux pas avoir plus :-DDD

Donc ce qui sera interessant de savoir c'est dans quelle colonne il faut supprimé
Aussi si c'est toujours quelque chose de genre (N) (N)
Puisque si tu as (NN) (NNN) alors ça sera difficile de donnerai une soluce

Donc j'ai besoin de savoir toutes les possibilités, même si je pête les cables ;-DDD
0
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009
5 oct. 2007 à 13:25
Ok, ca va alors, je n'ai qu'une centaine de colonne.
Mais tu peux essayer avec l'exemple que je t'ai donné, c'est à dire la colonne 4.
Aprés je l'adapterai.

Ensuite par rapport aux nombre à l'intérieur, les différents cas sont (je parle par rapport au fichier excel)
1. (1)
2.
3. (1) (2)
4. (1) (2) (3)

Et ce que je dois obtenir au final dans mon csv
1. 1
2.
3. 1,2
4. 1,2,3
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
5 oct. 2007 à 14:31
root@debian:~/src# vi ccm.pl
#!/usr/bin/perl
use strict;use warnings;
use Spreadsheet::ParseExcel;

open F,">>resultat.csv"
    or die "E/S : $!\n";

#my $file = "keo4cUWzZ8_Test.xls";
my $file = "Test.xls";
#my $file = "Test.xls";
my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file);
my $sheet = ${$excel->{Worksheet}}[0];

foreach my $row (0 ... 2 ){
  my $cell1 = $sheet->{Cells}[$row][0];
  my $cell2 = $sheet->{Cells}[$row][1];
  my $cell3 = $sheet->{Cells}[$row][2];
  my $cell4 = $sheet->{Cells}[$row][3];
  $cell4->{Val} =~s/[()]//g;
  $cell4->{Val} =~s/\D//g;
  $cell4->{Val} =~s/(?<=\d)(?=\d)/,/g;

  my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};";
  $res =~s/\n//;
  $res =~s/\x01\x53/oe/g;
  $res =~s/\x00//g;
  print "$res\n";
}
__END__
0
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009
5 oct. 2007 à 15:34
Merci beaucoup pour toute cette aide. Je crois que je vais plus t'embêter maintenant.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
5 oct. 2007 à 15:35
Je crois que je vais plus t'embêter maintenant
qui as dit que tu m'embêtes?

et si c'est le cas alors tu peux continuer :-DDD
0
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009
5 oct. 2007 à 15:44
OK
0