Modif des caractères d'un xls/csv 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
-
4 oct. 2007 à 13:54
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009 - 4 oct. 2007 à 17:01
VivoBaggio Messages postés 140 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 23 janvier 2009 - 4 oct. 2007 à 17:01
A voir également:
- Modif des caractères d'un xls/csv en perl
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Deux caractères manquent dans cette url ✓ - Forum Programmation
- Clavier mac caractères spéciaux - Guide
- Caractères ascii - Guide
- Caracteres speciaux - Guide
11 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 566
4 oct. 2007 à 14:41
4 oct. 2007 à 14:41
Salut,
tu ouvres avec quoi ton .csv?
envoi ton fichier xls entier ainsi que le .csv que tu as obtenu
ça nous fera gagner de temps ;-)
tu ouvres avec quoi ton .csv?
envoi ton fichier xls entier ainsi que le .csv que tu as obtenu
ça nous fera gagner de temps ;-)
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
4 oct. 2007 à 14:58
4 oct. 2007 à 14:58
Je viens de mettre les extraits de fichiers dans cjoint.com
https://www.cjoint.com/?keo3qkbn1X pour le fichier csv
https://www.cjoint.com/?keo4cUWzZ8 pour le fichier xls
https://www.cjoint.com/?keo3qkbn1X pour le fichier csv
https://www.cjoint.com/?keo4cUWzZ8 pour le fichier xls
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 566
4 oct. 2007 à 16:00
4 oct. 2007 à 16:00
essaie
#!/usr/bin/perl
use strict;use warnings;
use Spreadsheet::ParseExcel;
open F,">>resultat.csv"
or die "E/S : $!\n";
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];
my $cell5 = $sheet->{Cells}[$row][4];
my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};";
$res =~s/\n//;
$res =~s/\x01\x53/oe/g;
print "$res\n";
}
__END__
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 566
4 oct. 2007 à 16:08
4 oct. 2007 à 16:08
mais ça ne marchera sur tout le fichier
si tu ne me donne que des extraits alors tu n'auras pas la solution complète
Le caractère SOH -> code ascii 01 correspond au Début d'en-tête (voir la table ASCII)
si tu ne me donne que des extraits alors tu n'auras pas la solution complète
Le caractère SOH -> code ascii 01 correspond au Début d'en-tête (voir la table ASCII)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
4 oct. 2007 à 16:09
4 oct. 2007 à 16:09
Ca marche à moitié. Je m'explique. Voici ce que j'obtiens dans mon csv
NULnoeNULuNULdNULs
Avant, j'avais NULnSOHSNULuNULdNULs.
Tu as réussi à enlever le SOHS. Mais, j'ai toujours mes valeurs NUL que je ne veux pas.
Comment faire ?
NULnoeNULuNULdNULs
Avant, j'avais NULnSOHSNULuNULdNULs.
Tu as réussi à enlever le SOHS. Mais, j'ai toujours mes valeurs NUL que je ne veux pas.
Comment faire ?
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
4 oct. 2007 à 16:12
4 oct. 2007 à 16:12
Le problème, c'est que je ne peux pas te passer le fichier complet pour des raisons de confidentialité. Désolé.
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 566
4 oct. 2007 à 16:20
4 oct. 2007 à 16:20
c'est que je ne peux pas te passer le fichier complet pour des raisons de confidentialité
je te comprends ;-)
tu ouvres avec quoi le csv?
je te comprends ;-)
tu ouvres avec quoi le csv?
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 566
4 oct. 2007 à 16:23
4 oct. 2007 à 16:23
essaie
#!/usr/bin/perl
use strict;use warnings;
use Spreadsheet::ParseExcel;
open F,">>resultat.csv"
or die "E/S : $!\n";
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];
my $cell5 = $sheet->{Cells}[$row][4];
my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};";
$res =~s/\n//;
$res =~s/\x01\x53/oe/g;
$res =~s/\x00//g;
print "$res\n";
}
__END__
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
4 oct. 2007 à 16:36
4 oct. 2007 à 16:36
Alors premièrement, j'ouvre mes .csv avec notepad++ et deuxièmement, merci. Je n'ai plus les NUL.
Et troisièmement, est-ce que tu peux me détailler les caractéristiques de :
$res =~s/\x01\x53/oe/g;
$res =~s/\x00//g;
Merci
Et troisièmement, est-ce que tu peux me détailler les caractéristiques de :
$res =~s/\x01\x53/oe/g;
$res =~s/\x00//g;
Merci
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 566
4 oct. 2007 à 16:42
4 oct. 2007 à 16:42
Dans une expression régulière on peut écrire le caractère de façon littérale, octale et héxadecimale
Donc le caractère NUl en hexa = 00
Le caractère SOH en hexa = 01
et le caractère S en hexa = 53
La notation est \xNN
\x01\x53
c'est
SOHS
Donc le caractère NUl en hexa = 00
Le caractère SOH en hexa = 01
et le caractère S en hexa = 53
La notation est \xNN
\x01\x53
c'est
SOHS
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
4 oct. 2007 à 17:01
4 oct. 2007 à 17:01
Et ben je dis RESPECT TOTAL. Merci