0000 1010 1100 1000 0000 0001 1111 1001
dans votre exemple, normalement le 1010 et le 1100 ne sont pas possible, en aucun cas ils doivent etre present mais sinon c'est le principe
si on a
0000 0001 0011 0100 1000 1111 1111 1111 ca donne 01368
0000 1010 1100 1000 0000 0001 1111 1001
dans votre exemple, normalement le 1010 et le 1100 ne sont pas possible, en aucun cas ils doivent etre present mais sinon c'est le principe
si on a
0000 0001 0011 0100 1000 1111 1111 1111 ca donne 01368
Alors voici une nouvelle version corrigé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 #!/usr/bin/perl use strict; use warnings; use feature qw(:5.14); my ($in) = @ARGV; my $bak = "$in.bak"; die "$bak already exists\n" if -f "$bak"; rename $in, $bak; open my $IN, "<", $bak or die "Can't open file $bak for reading: $!"; open my $OUT, ">", $in or die "Can't open file $in for writing: $!"; my (@kept_lines, $decoded); while (my $line = <$IN>) { chomp($line); my ($code) = $line =~ /,([\da-f]+)$/i; next if !$code || $code !~ /^8[18]/; if ($code =~ /^81/) { warn "Line to decode found at $. in $bak\n" if !$decoded; warn "New line to decode at $. in $bak\n" if $decoded; my $bitcode = unpack("B*", pack("H*", $code)); my $bit75 = substr($bitcode, 74, 8); my $bitpos; if ($bit75 eq "00000000") { my $bit171 = substr($bitcode, 170, 2); if ($bit171 eq "00" || $bit171 eq "11") { $bitpos = substr($bitcode, 185, 1) eq "1" ? 217 : 209; } else { $bitpos = substr($bitcode, 200, 1) eq "1" ? 232 : 224; } } elsif ($bit75 eq "00000001") { my $bit194 = substr($bitcode, 193, 2); if ($bit194 eq "00" || $bit194 eq "11") { $bitpos = substr($bitcode, 209, 1) eq "1" ? 241 : 232; } else { $bitpos = substr($bitcode, 222, 1) eq "1" ? 254 : 246; } } my $old_decoded = $decoded if $decoded; $decoded = join "", grep $_ < 10, map oct("0b$_"), substr($bitcode, $bitpos, 32) =~ /(.{4})/g if $bitpos; if ($old_decoded) { if ($decoded != $old_decoded) { warn "-> new decoded value is different from first occurence: old = $old_decoded, new = $decoded\n"; } else { warn "-> same value ($decoded == $old_decoded)\n"; } } if (@kept_lines) { map { say { $OUT } "$_ $decoded" } splice @kept_lines; } } elsif ($decoded) { say { $OUT } "$line $decoded"; } else { push @kept_lines, $line; } }
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
ca donne bien mon résultat?
Car j'ai encore un peu de mal à l'utilisation de perl, maintenant je sais que c'est bien installe, mais après ce code je le mets dans quoi? un fichier text?
et ensuite je fais ce que m'a dis Laurent <nom du programme > <nom du fichier>
Oui, 9571
Pour info, je serai absent ce we, et de retour lundi matin.
Il est facile d'adapter le script pour accepter le remplacement de plusieurs fichiers plutôt que d'un seul.
Je regarderai lundi si personne n'a proposé de solution avant
Bon week-end (et oui, je finis à midi, et cet aprèm, c'est sortie vélo ; avec un temps pareil, ce serait dommage de louper ça).
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Super, merci infiniment!!!
Bonne sortie vélo bien mérité!!
Oui, tu le mets dans un fichier texte, de préférence avec l'extension ".pl", ça permet au moins de savoir ce que c'est. Donc par exemple, dans "programme.pl" (mais tu peux donner un nom plus en rapport avec ce que tu fais avec). Ensuite:
Sauf qu'il faut peut-être préciser le chemin, selon l'endroit où se trouvent le programme et les fichiers en entrée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 perl programme.pl fichier.txt
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Si tu n'y arrives pas d'ici là, je testerai le programme de Philou ce soir avec ton fichier de données.
Je ne peux pas passer trop de temps là-dessus au boulot.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Bonjour Marylène,
je viens d'essayer le programme de Philou avec ton fichier de données, mais le résultat n'est pas probant pour l'instant: le fichier résultat généré est vide.
Tu as réussi à faire tourner le programme (à défaut qu'il produise quelque chose)?
Du coup, je vais essayer de le débuguer, mais ça va prendre un peu plus de temps. Je te tiens au courant de mes tentatives.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Marylène,
après correction du problème (simple problème de format de fichier entre Unix et Windows), voici le résultat que j'obtiens dans le fichier résultat:
Je te laisse déterminer si c'est ce que tu voulais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150 2015/03/03 09:00:04,639,1671,B->R03,88060002BA3048386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:09,739,1578,B->R03,88060002BAAFC8386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:14,839,1478,B->R03,88060002BB2F48386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:19,939,1354,B->R03,88060002BBAEC8386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:25,039,1741,B->R03,88060002BC2E48386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:30,139,1648,B->R03,88060002BCADC8386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:35,239,1544,B->R03,88060002BD2D48386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:40,339,1444,B->R03,88060002BDACC8386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:45,439,1341,B->R03,88060002BE2C48386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:50,539,1748,B->R03,88060002BEABC8386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:00:55,639,1634,B->R03,88060002BF2B48386E8000E49006A4816B000200040010B000000000 9571 2015/03/03 09:01:00,739,1541,B->R03,88060002BFAAC8386E8000E49006A4816C000220044000B000000000 9571 2015/03/03 09:06:46,939,1671,B->R03,88060002E179C8386E8000E49005FD803C5001A00346E83000000000 9571 2015/03/03 09:06:46,789,1821,B->R04,88060002E17608386E8000E49005FD80315001A00346E83000000000 9571 2015/03/03 09:06:47,539,1561,B->R04,88060002E188C8386E8000E49005FE802E0001E003C6E03000000000 9571 2015/03/03 09:06:47,689,1421,B->R03,88060002E18C88386E8000E49005FE80390001E003C6E03000000000 9571 2015/03/03 09:06:50,089,1514,B->R03,88060002E1C888386E8000E49005FE80F20001E003C7003000000000 9571 2015/03/03 09:06:51,589,1518,B->R04,88060002E1EE08386E8000E49005FE81670002000407003000000000 9571 2015/03/03 09:06:51,739,1858,B->R03,88060002E1F1C8386E8000E49005FE81720002000407003000000000 9571 2015/03/03 09:06:56,689,1424,B->R04,88060002E26D88386E8000E49005FE82F60002400487203000000000 9571 2015/03/03 09:07:01,789,1801,B->R04,88060002E2ED08386E8000E49005FE848B0002A00547203000000000 9571 2015/03/03 09:07:06,889,1718,B->R04,88060002E36C88386E8000E49005FE86220002E005C7403000000000 9571 2015/03/03 09:07:07,789,1801,B->R04,88060002E38308386E8000E49005FF80385001A00347483000000000 9571 2015/03/03 09:07:08,389,1701,B->R04,88060002E39208386E8000E4900600802B0001C00387403000000000 9571 2015/03/03 09:07:11,989,1608,B->R04,88060002E3EC08386E8000E4900600814E0001E003C7403000000000 9571 2015/03/03 09:07:17,089,2004,B->R04,88060002E46B88386E8000E490060082EC0002400487603000000000 9571 2015/03/03 09:07:22,189,1411,B->R04,88060002E4EB08386E8000E4900600848E0002A00547603000000000 9571 2015/03/03 09:07:25,639,1448,B->R04,88060002E54148386E8000E490060180315001A00347683000000000 9571 2015/03/03 09:07:27,289,1788,B->R04,88060002E56A88386E8000E490060180B85001C00387683000000000 9571 2015/03/03 09:07:32,239,1848,B->R04,88060002E5E648386E8000E490060280320001A00347603000000000 9571 2015/03/03 09:07:32,389,2198,B->R04,88060002E5EA08386E8000E4900602803F0001A00347803000000000 9571 2015/03/03 09:07:37,489,1604,B->R04,88060002E66988386E8000E490060281E60002200447803000000000 9571 2015/03/03 09:07:42,589,1491,B->R04,88060002E6E908386E8000E4900602839000026004C7803000000000 9571 2015/03/03 09:07:43,639,1451,B->R04,88060002E70348386E8000E490060380385001A00347883000000000 9571 2015/03/03 09:07:47,689,1378,B->R04,88060002E76888386E8000E4900603818C5002000407883000000000 9571 2015/03/03 09:07:52,789,1774,B->R04,88060002E7E808386E8000E4900603833850026004C7883000000000 9571 2015/03/03 09:07:56,239,1831,B->R04,88060002E83E48386E8000E490060480290001A00347803000000000 9571 2015/03/03 09:07:57,889,1681,B->R04,88060002E86788386E8000E490060480B30001C00387803000000000 9571 2015/03/03 09:08:00,289,1778,B->R04,88060002E8A388386E8000E490060580385001A00347A83000000000 9571 2015/03/03 09:08:02,989,1581,B->R04,88060002E8E708386E8000E4900605811C5001E003C7A83000000000 9571 2015/03/03 09:08:08,089,1478,B->R04,88060002E96688386E8000E490060582CC5002400487A83000000000 9571 2015/03/03 09:08:13,189,1874,B->R04,88060002E9E608386E8000E4900605847D5002A00547A83000000000 9571 2015/03/03 09:08:17,539,1521,B->R04,88060002EA52C8386E8000E49006D680375001A00347C83000000000 9571 2015/03/03 09:08:18,139,1421,B->R04,88060002EA61C8386E8000E4900606802E0001C00387C03000000000 9571 2015/03/03 09:08:18,289,1781,B->R04,88060002EA6588386E8000E4900606803B0001E003C7C03000000000 9571 2015/03/03 09:08:23,389,1668,B->R04,88060002EAE508386E8000E490060681F30002200447C03000000000 9571 2015/03/03 09:08:28,489,1568,B->R04,88060002EB6488386E8000E490060683AE0002800507E03000000000 9571 2015/03/03 09:08:33,589,1464,B->R04,88060002EBE408386E8000E4900606856A0002C00587E03000000000 9571 2015/03/03 09:08:38,089,1461,B->R04,88060002EC5488386E8000E49006D780355001A00347E83000000000 9571 2015/03/03 09:08:38,689,1861,B->R04,88060002EC6388386E8000E49006D8802E0001C00387E03000000000 9571 2015/03/03 09:08:43,789,1748,B->R04,88060002ECE308386E8000E49006D881ED0002200447E03000000000 9571 2015/03/03 09:08:45,889,1651,B->R04,88060002ED1788386E8000E49006D980365001A00347E83000000000 9571 2015/03/03 09:08:48,889,1658,B->R04,88060002ED6288386E8000E49006D9813D5001E003C7E83000000000 9571 2015/03/03 09:08:53,989,1564,B->R04,88060002EDE208386E8000E49006D982FE5002400487E83000000000 9571 2015/03/03 09:08:56,089,1448,B->R04,88060002EE1688386E8000E49006DA803A5001A00347E83000000000 9571 2015/03/03 09:08:56,689,1348,B->R04,88060002EE2588386E8000E49006DB80320001C00387E03000000000 9571 2015/03/03 09:08:59,089,1451,B->R04,88060002EE6188386E8000E49006DB81050001E003C7E03000000000 9571 2015/03/03 09:09:04,189,1838,B->R04,88060002EEE108386E8000E49006DB82C40002400487E03000000000 9571 2015/03/03 09:09:09,289,1754,B->R04,88060002EF6088386E8000E49006DB84820002A00547E03000000000 9571 2015/03/03 09:09:13,189,1841,B->R04,88060002EFC208386E8000E49006DC80395001A00347E83000000000 9571 2015/03/03 09:09:14,389,1641,B->R04,88060002EFE008386E8000E49006DC80A25001C00387E83000000000 9571 2015/03/03 09:09:19,489,1541,B->R04,88060002F05F88386E8000E49006DC82615002200447E83000000000 9571 2015/03/03 09:09:20,089,1441,B->R04,88060002F06E88386E8000E49006DD80320001A00347E03000000000 9571 2015/03/03 09:09:24,589,1438,B->R04,88060002F0DF08386E8000E49006DD81BC0002000407E03000000000 9571 2015/03/03 09:09:29,689,1824,B->R04,88060002F15E88386E8000E49006DD837B00026004C7E03000000000 9571 2015/03/03 09:09:29,989,2024,B->R04,88060002F16608386E8000E49007D0803A5001A00347E83000000000 9571 2015/03/03 09:09:34,789,1721,B->R04,88060002F1DE08386E8000E49007D081DF5002000407E83000000000 9571 2015/03/03 09:09:39,889,1628,B->R04,88060002F25D88386E8000E49007D0839F50026004C7E83000000000 9571 2015/03/03 09:09:42,889,1614,B->R04,88060002F2A888386E8000E49007D1802B0001A00347E03000000000 9571 2015/03/03 09:09:44,989,1528,B->R04,88060002F2DD08386E8000E49007D180E30001E003C7E03000000000 9571 2015/03/03 09:09:47,689,1821,B->R04,88060002F32088386E8000E49007D2802E5001A00347E83000000000 9571 2015/03/03 09:09:50,089,1424,B->R04,88060002F35C88386E8000E49007D281015001E003C7E83000000000 9571 2015/03/03 09:09:55,189,1821,B->R04,88060002F3DC08386E8000E49007D282C35002400488083000000000 9571 2015/03/03 09:10:00,289,1718,B->R04,88060002F45B88386E8000E49007D284855002A00548083000000000 9571 2015/03/03 09:10:04,939,1564,B->R04,88060002F4CFC8386E8000E49007D380305001A00348083000000000 9571 2015/03/03 09:10:05,389,1618,B->R04,88060002F4DB08386E8000E49007D380585001C00387E83000000000 9571 2015/03/03 09:10:05,689,1818,B->R04,88060002F4E288386E8000E49007D480350001E003C7E03000000000 9571 2015/03/03 09:10:10,489,1504,B->R04,88060002F55A88386E8000E49007D481DD0002200448003000000000 9571 2015/03/03 09:10:15,589,1421,B->R04,88060002F5DA08386E8000E49007D4839F0002800507E03000000000 9571 2015/03/03 09:10:15,739,1761,B->R04,88060002F5DDC8386E8000E49007D580300001A00347E03000000000 9571 2015/03/03 09:10:20,689,1808,B->R04,88060002F65988386E8000E49007D581E30002200447E03000000000 9571 2015/03/03 09:10:25,039,1454,B->R04,88060002F6C648386E8000E49007D680345001A00347E83000000000 9571 2015/03/03 09:10:25,639,1854,B->R04,88060002F6D548386E8000E49007D7802C0001C00387E03000000000 9571 2015/03/03 09:10:25,789,2208,B->R04,88060002F6D908386E8000E49007D780390001E003C7E03000000000 9571 2015/03/03 09:10:30,889,1591,B->R04,88060002F75888386E8000E49007D781FA0002200447E03000000000 9571 2015/03/03 09:10:35,989,1501,B->R04,88060002F7D808386E8000E49007D783BC0002800508003000000000 9571 2015/03/03 09:10:41,089,1398,B->R04,88060002F85788386E8000E49007D7857E0002C00588003000000000 9571 2015/03/03 09:10:45,139,1844,B->R04,88060002F8BCC8386E8000E49007D880375001A00347E83000000000 9571 2015/03/03 09:10:45,739,1754,B->R04,88060002F8CBC8386E8000E49007D9802F0001C00387E03000000000 9571 2015/03/03 09:10:46,189,1794,B->R04,88060002F8D708386E8000E49007D980570001E003C7E03000000000 9571 2015/03/03 09:10:51,289,1681,B->R04,88060002F95688386E8000E49007D982160002200447E03000000000 9571 2015/03/03 09:10:56,389,1588,B->R04,88060002F9D608386E8000E49007D983D30002800507E03000000000 9571 2015/03/03 09:11:01,489,1488,B->R04,88060002FA5588386E8000E49007D9858D0002E005C7C03000000000 9571 2015/03/03 09:11:05,389,1581,B->R04,88060002FAB708386E8000E49007DC80315001A00347C83000000000 9571 2015/03/03 09:11:05,989,1484,B->R04,88060002FAC608386E8000E49007DD80290001C00387C03000000000 9571 2015/03/03 09:11:06,589,1874,B->R04,88060002FAD508386E8000E49007DD805D0002000407C03000000000 9571 2015/03/03 09:11:11,689,1791,B->R04,88060002FB5488386E8000E49007DD82100002200447A03000000000 9571 2015/03/03 09:11:16,789,1678,B->R04,88060002FBD408386E8000E49007DD83C00002800507A03000000000 9571 2015/03/03 09:11:21,889,1578,B->R04,88060002FC5388386E8000E49007DD85700002C00587A03000000000 9571 2015/03/03 09:11:25,339,1631,B->R04,88060002FCA9C8386E8000E49007DE80305001A00347C83000000000 9571 2015/03/03 09:11:26,089,1361,B->R04,88060002FCBC88386E8000E49007DF80340001E003C7C03000000000 9571 2015/03/03 09:11:26,989,1464,B->R04,88060002FCD308386E8000E49007DF80810002200447C03000000000 9571 2015/03/03 09:11:32,089,1371,B->R04,88060002FD5288386E8000E49007DF82370002200447C03000000000 9571 2015/03/03 09:11:37,189,1768,B->R04,88060002FDD208386E8000E49007DF83EF0002800507C03000000000 9571 2015/03/03 09:11:42,289,1664,B->R04,88060002FE5188386E8000E49007DF85A90002E005C7E03000000000 9571 2015/03/03 09:11:45,139,1798,B->R04,88060002FE98C8386E8000E49007E0803B5001A00347E83000000000 9571 2015/03/03 09:11:45,739,1711,B->R04,88060002FEA7C8386E8000E49007E180330001C00387E03000000000 9571 2015/03/03 09:11:47,389,1561,B->R04,88060002FED108386E8000E49007E180C30001C00387E03000000000 9571 2015/03/03 09:11:52,489,1458,B->R04,88060002FF5088386E8000E49007E182820002400487E03000000000 9571 2015/03/03 09:11:57,589,1858,B->R04,88060002FFD008386E8000E49007E184400002A00507E03000000000 9571 2015/03/03 09:12:02,689,1744,B->R04,88060003004F88386E8000E49007E185FF0002E005C7E03000000000 9571 2015/03/03 09:12:04,489,1458,B->R04,88060003007C88386E8000E49007E280365001A00347E83000000000 9571 2015/03/03 09:12:05,089,1848,B->R04,88060003008B88386E8000E49007E3802F0001C00387E03000000000 9571 2015/03/03 09:12:07,789,1641,B->R04,8806000300CF08386E8000E49007E3811D0001E003C8003000000000 9571 2015/03/03 09:12:12,889,1558,B->R04,88060003014E88386E8000E49007E382DF0002400488003000000000 9571 2015/03/03 09:12:17,989,1458,B->R04,8806000301CE08386E8000E49007E384A00002A00547E03000000000 9571 2015/03/03 09:12:23,089,1844,B->R04,88060003024D88386E8000E49007E386610003000607E03000000000 9571 2015/03/03 09:12:23,689,1734,B->R04,88060003025C88386E8000E49007E480305001A00347E83000000000 9571 2015/03/03 09:12:24,439,1484,B->R04,88060003026F48386E8000E49007E580360001E003C8003000000000 9571 2015/03/03 09:12:28,189,1731,B->R04,8806000302CD08386E8000E49007E581810002000408003000000000 9571 2015/03/03 09:12:33,289,1638,B->R04,88060003034C88386E8000E49007E5834300026004C8003000000000 9571 2015/03/03 09:12:38,389,1538,B->R04,8806000303CC08386E8000E49007E585070002C00588003000000000 9571 2015/03/03 09:12:43,039,1371,B->R04,88060003044048386E8000E49007E6803B5001A00348083000000000 9571 2015/03/03 09:12:43,489,1424,B->R04,88060003044B88386E8000E49007E680635001C00387E83000000000 9571 2015/03/03 09:12:43,639,1774,B->R04,88060003044F48386E8000E49007E780340001C00387E03000000000 9571 2015/03/03 09:12:48,589,1821,B->R04,8806000304CB08386E8000E49007E781E80002200447E03000000000 9571 2015/03/03 09:12:53,689,1738,B->R04,88060003054A88386E8000E49007E783A90002800507E03000000000 9571 2015/03/03 09:12:58,789,1624,B->R04,8806000305CA08386E8000E49007E785680002E005C7E03000000000 9571 2015/03/03 09:13:02,539,1361,B->R04,880600030627C8386E8000E49008CA80305001A00347E83000000000 9571 2015/03/03 09:13:03,289,1611,B->R04,88060003063A88386E8000E49007E880340001E003C7E03000000000 9571 2015/03/03 09:13:03,889,1511,B->R04,88060003064988386E8000E49007E880690002000407E03000000000 9571 2015/03/03 09:13:08,989,1408,B->R04,8806000306C908386E8000E49007E882260002200447E03000000000 9571 2015/03/03 09:13:14,089,1818,B->R04,88060003074888386E8000E49007E883E20002800507E03000000000 9571 2015/03/03 09:13:19,189,1714,B->R04,8806000307C808386E8000E49007E8859F0002E005C7E03000000000 9571 2015/03/03 09:13:22,189,1708,B->R04,88060003081308386E8000E49008CB80395001A00347E83000000000 9571 2015/03/03 09:13:22,789,1611,B->R04,88060003082208386E8000E49008CC80300001C00387E03000000000 9571 2015/03/03 09:13:24,289,1601,B->R04,88060003084788386E8000E49008CC80B40001C00387E03000000000 9571 2015/03/03 09:13:29,389,1508,B->R04,8806000308C708386E8000E49008CC82720002400487E03000000000 9571 2015/03/03 09:13:31,339,1551,B->R04,8806000308F7C8386E8000E49008CD80315001A00347E83000000000 9571 2015/03/03 09:13:34,489,1408,B->R04,88060003094688386E8000E49008CD81455001E003C7E83000000000 9571 2015/03/03 09:13:36,589,2241,B->R05,88060003097B08386E8000E49008CD81FD5002200447E83000000000 9571 2015/03/03 09:13:39,739,1598,B->R05,8806000309C9C8386E8000E49008CD831150026004C7E83000000000 9571 2015/03/03 09:13:39,589,1804,B->R04,8806000309C608386E8000E49008CD83045002400487E83000000000 9571 2015/03/03 09:13:41,689,1638,B->R05,8806000309FA88386E8000E49008CE803F5001A00347E83000000000 9571 2015/03/03 09:13:41,539,1838,B->R04,8806000309F6C8386E8000E49008CE80315001A00347E83000000000 9571 2015/03/03 09:13:42,439,1391,B->R05,880600030A0D48386E8000E49008CF80430001E003C7E03000000000 9571 2015/03/03 09:13:42,289,1588,B->R04,880600030A0988386E8000E49008CF80360001E003C7E03000000000 9571 2015/03/03 09:13:44,839,1484,B->R05,880600030A4948386E8000E49008CF81150001E003C7E03000000000 9571 2015/03/03 09:13:44,689,1681,B->R04,880600030A4588386E8000E49008CF81080001E003C7E03000000000 9571
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Bonjour,
je ne sais pas pourquoi le fil "Import de fichiers" s'est bloqué quand j'ai posté les résultats du test. J'ai essayé de créer un nouveau fil ("Import de fichiers, nouveau fil), et de nouveau le même problème.
Du coup, je reposte les résultats des tests avec le programme de Philou et le fichier de données de Marylène, cette fois en pièce jointe.
@Marylène: peux-tu vérifier que cela correspond à ce que tu attends et comparer le résultat avec celui de ton script VBA?
Cordialement,
Laurent.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Merci, mais je n'ai pas accès au code de @Philou, mais on trouvait le meme resultat Philou et moi.
Oui l'affichage correspond, j'ai une petite demande, peut on enlever pour l' exemple " 2015/03/03 09:00:04,639,1671,B->R03,88060002BA3048386E8000E49006A4816B000200040010B000000000 9571" peut on enlever les ",639,1671,B->R03" à chaque ligne, je n'en ai pas besoin, et pourquoi toutes les lignes sont collées les une aux autres?
Sinon c'est parfait!!
comment faire pour l'adapter à plusieurs fichiers maintenant?
Merci pour votre aide.
De plus j'ai mis le prgramme de Philou actuel dans un fichier programme.txt
j'ai donc écris <programme.txt><nomdefichier.eur> mais l'interface m'a dit ne pas connaitre "
est ce la bonne méthode?
par ailleurs on avait parlé de in.txt.bak que je pouvais changer en in.eur.bak mais je vois pas ca dans le programme ?
Je reposte le code de philou
Sinon, quelqu'un a contacté un admin pour voir s'il peut réparer la discussion ? (on n'a plus accès aux messages de la dernière page).
Sinon, vous avez discuté de quoi ce week-end ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 #!/usr/bin/perl use strict; use warnings; use feature qw(:5.14); my ($in) = @ARGV; my $bak = "$in.bak"; die "$bak already exists\n" if -f "$bak"; rename $in, $bak; open my $IN, "<", $bak or die "Can't open file $bak for reading: $!"; open my $OUT, ">", $in or die "Can't open file $in for writing: $!"; my (@kept_lines, $decoded); while (my $line = <$IN>) { chomp($line); my ($code) = $line =~ /,([\da-f]+)$/i; next if !$code || $code !~ /^8[18]/; if ($code =~ /^81/) { warn "Line to decode found at $. in $bak\n" if !$decoded; warn "New line to decode at $. in $bak\n" if $decoded; my $bitcode = unpack("B*", pack("H*", $code)); my $bit75 = substr($bitcode, 74, 8); my $bitpos; if ($bit75 eq "00000000") { my $bit171 = substr($bitcode, 170, 2); if ($bit171 eq "00" || $bit171 eq "11") { $bitpos = substr($bitcode, 185, 1) eq "1" ? 217 : 209; } else { $bitpos = substr($bitcode, 200, 1) eq "1" ? 232 : 224; } } elsif ($bit75 eq "00000001") { my $bit194 = substr($bitcode, 193, 2); if ($bit194 eq "00" || $bit194 eq "11") { $bitpos = substr($bitcode, 209, 1) eq "1" ? 241 : 232; } else { $bitpos = substr($bitcode, 222, 1) eq "1" ? 254 : 246; } } my $old_decoded = $decoded if $decoded; $decoded = join "", grep $_ < 10, map oct("0b$_"), substr($bitcode, $bitpos, 32) =~ /(.{4})/g if $bitpos; if ($old_decoded) { if ($decoded != $old_decoded) { warn "-> new decoded value is different from first occurence: old = $old_decoded, new = $decoded\n"; } else { warn "-> same value ($decoded == $old_decoded)\n"; } } if (@kept_lines) { map { say { $OUT } "$_ $decoded" } splice @kept_lines; } } elsif ($decoded) { say { $OUT } "$line $decoded"; } else { push @kept_lines, $line; } }
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Avez vous lu mon dernier message Philou?
Oui, j'ai contacté Djibril qui m'a dit qu'il s'en occupait, mais j'ai l'impression qu'il a mal compris car il a supprimé le message qui marchait (que j'ai donc reposté le lendemain).
Marylène, les lignes ne sont pas séparées parce qe le fichier est au format Unix. Le voici au format Dos/Windows.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Je rectifie ma question
car j'ai reussi à faire marcher le programme de Philou et c'est exactement ca.
j'ai deux demandes :S
la premiere peut on enlever dans mes lignes la partie après les secondes, jusqu'au debut du message 88
et la seconde comment faire votre unique ligne pour le faire à un fichier ?
( mes lignes sont bien les unes en dessous des autres aussi merci Laurent
@Philou pouvez vous commenter un peu le programme pour que je comprenne un peu mieux , de if($bit75 eq"00000000") à ...if $bitpos, je comprends,
mais que signifie la partie au debu avec les IN et OUT et les boucles de la fin avec warn ?
Je vais commenter, en revanche pour passer à une fichier, il faudrait indiquer comment doit se comporter le programme, car il y aura plusieurs lignes 81 (au moins une par fichier je suppose), et qui pourront bien sûr être différentes. Je suppose que pour chaque fichier séparément, il faudra calculer la valeur décimale correspondant à la ligne 81, puis l'appliquer aux lignes 88 de ce fichier uniquement.
Quand au fichier unique, est-ce simplement la concaténation des différents fichiers de sortie en un seul ?
Pour exécuter un script perl, il est préférable de nommer le fichier source avec l'extension .pl
Il est ensuite possible de l'appeler avec
perl script.pl paramètres...
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Exactement,
il peut y avoir plusieurs messages 81 dans un fichier, mais ils donneront le meme message .
En revanche deux fichiers n'ont pas forcement le meme message 81
il faut donc faire comme précedemment pour chaque fichier, et ensuite les concaténer ensemble pour en resortir qu'un seul fichier
et pour enlever une partie de ma ligne c'est facile?
Oui, pour enlever facilement le texte entre le time stamp et le code.
Je vais mettre à jour et poster avec les commentaires (qui sont déjà écrits).
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Voici le code adapté et commenté. Utilisation :
perl decode.pl *.txt > un_fichier.txt
PS : il n'y a encore pas la suppression du texte avant le code (je mettrai à jour ce post après ma pause).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 #!/usr/bin/perl use strict; use warnings; use feature qw(:5.14); # Le fichier résultat sera la sortie standard : utiliser > un_fichier.txt pour le stocker # Récupération des paramètres d'appel du script (on affecte au tableau @in, le tableau @ARGV) my @in = @ARGV; # Pour tous les fichier en entrée foreach my $in (@in) { warn "Treating $in...\n"; # Création d'un nom de fichier backup my $bak = "$in.bak"; # Sortir si le fichier backup existe déjà die "$bak already exists\n" if -f "$bak"; # Renommer le fichier d'entrée en fichier backup rename $in, $bak; # Ouvrir le fichier backup (l'ancien fichier d'entrée) en lecture # et le fichier de sortie en écriture (le nouveau fichier d'entrée) open my $IN, "<", $bak or die "Can't open file $bak for reading: $!"; # Déclarer un tableau pour les lignes 88 lues avant la ligne 81 # et un scalaire pour le code décimal my (@kept_lines, $decoded); # Boucler sur toutes les lignes du fichier ouvert en entrée while (my $line = <$IN>) { # Supprimer les caractères de fin de ligne (mettre à jour la variable # $/ s'il ne s'agit pas de \n) chomp($line); # Récupération du timestamp et du code hexa de la ligne my ($timestamp, $code) = $line =~ /(.*?,).*,([\da-f]+)$/i; # Passer à la ligne suivante si le code n'est ni 81 ni 88 next if !$code || $code !~ /^8[18]/; if ($code =~ /^81/) { # Si l'on a déjà décodé un code, le signaler, sinon simplement # indiquer que l'on décode warn "Line to decode found at $. in $bak\n" if !$decoded; warn "New line to decode at $. in $bak\n" if $decoded; # Convertir le code hexa en binaire # La transformation s'opère en deux temps : # pack("H*", $code) code en "binaire" le code hexa récupéré sous forme ASCII # puis unpack("B*", ...) décode le "binaire" en code binaire sous forme ASCII # "binaire" signifiant ici de vrai binaire numérique (comme il est stocké dans un entier numérique). # Les formats majuscules imposent un sens de code hexa et binaire "MSB" first (bit de poids fort en premier) my $bitcode = unpack("B*", pack("H*", $code)); my $bit75 = substr($bitcode, 74, 8); # Déclaration d'une variable qui contiendra la position des 32bits à décoder my $bitpos; if ($bit75 eq "00000000") { my $bit171 = substr($bitcode, 170, 2); if ($bit171 eq "00" || $bit171 eq "11") { $bitpos = substr($bitcode, 185, 1) eq "1" ? 217 : 209; } else { $bitpos = substr($bitcode, 200, 1) eq "1" ? 232 : 224; } } elsif ($bit75 eq "00000001") { my $bit194 = substr($bitcode, 193, 2); if ($bit194 eq "00" || $bit194 eq "11") { $bitpos = substr($bitcode, 209, 1) eq "1" ? 241 : 232; } else { $bitpos = substr($bitcode, 222, 1) eq "1" ? 254 : 246; } } # Sauvegarde de l'éventuel code décimal actuellement déjà décodé my $old_decoded = $decoded if $decoded; # Construction du code décimal # La construction suit plusieurs étapes (pipeline de fonction à lire de droite à gauche) : # 1- substr($bitcode, $bitpos, 32) =~ /(.{4})/g : récupère le code binaire ASCII de 32 à la position $bitpos # et en extrait un tableau de chaines de 4 digit binaires # grâce à une recherche d'expression régulière globale # 2- map oct("0b$_") : pour chaque chaine binaire de 4 digits, convertir le code binaire ASCII en valeur numérique # 3- grep $_ < 10 : pour chaque valeur numérique, ne conserver que les valeurs inférieures à 10 # 4- join "" : concaténer sous forme "chaine" les digits décimaux ($decoded est alors une chaine # mais qui peut être utilisée dans un contexte numérique comme une valeur numérique) $decoded = join "", grep $_ < 10, map oct("0b$_"), substr($bitcode, $bitpos, 32) =~ /(.{4})/g if $bitpos; # Trivial if ($old_decoded) { if ($decoded != $old_decoded) { warn "-> new decoded value is different from first occurence: old = $old_decoded, new = $decoded\n"; } else { warn "-> same value ($decoded == $old_decoded)\n"; } } # Si l'on a stocké des lignes 88 précédent cette ligne 81, les traiter en ajoutant le code décimal if (@kept_lines) { map { say "$_ $decoded" } splice @kept_lines; } } # Si la ligne n'est pas une 81 (c'est donc forcément une 88) et que le code décimal a été décodé # traiter la ligne en ajoutant le code décimal au timestamp et au code hexa elsif ($decoded) { say "$timestamp$code $decoded"; } # Si la ligne n'est pas une 81 et que le code n'est pas décodé, enregistrer la ligne (timestamp et code hexa) pour un traitement # ultérieur (lors du traitement de la ligne 81) else { push @kept_lines, "$timestamp$code"; } } }
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager