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
- Caractères ascii - Guide
- Suivi des modifications word - Guide
- Caractères spéciaux clavier azerty - Guide
- Caractères spéciaux - Guide
- Xls viewer - Télécharger - Tableur
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 569
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 569
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 569
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 569
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 569
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 569
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