Le vendredi 20 juin, Frederic Mantegazza a écrit :
> > LC_CTYPE=fr strings ton_fichier
>
> Ca marche po :o(
Tu es sûr d'avoir installé les locales ? Parce que chez moi ça marche :
[edgar@pitufo sliv]$ echo àéioù | strings
[edgar@pitufo sliv]$ echo àéioù | LC_CTYPE=fr strings
àéioù
[edgar@pitufo sliv]$ strings --version
GNU strings 2.11.90.0.8
Copyright 1997, 98, 99, 2000, 2001 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License. This program has absolutely no warranty.
[edgar@pitufo sliv]$
> Ou quelqu'un a-t-il un petit script qui fasse ca ?
J'ai écrit un programme C. Il est en pièce jointe.
Edgar.
--
Edgar Bonet Tél : 04 76 88 10 96
Laboratoire Louis Néel -- CNRS Mobile : 06 77 19 79 39
25 av. des Martyrs, BP 166 Fax : 04 76 88 11 91
38042 Grenoble cedex 9, France e-mail : guilde@???
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <locale.h>
#define NON_PT 0
#define DEBUT_PT 1
#define PRINT_PT 2
int interessant(int c)
{
if (!isprint(c)) return 0;
if (c < 128) return 1;
if (c > 252 || c <171) return 0;
if (c > 171 && c < 187) return 0;
return 1;
}
int min_len = 4;
int main(int argc, char *argv[])
{
FILE *input = stdin;
int arg = 1;
int etat = NON_PT;
char *buffer;
int c, i = 0;
for (arg = 1; arg < argc ; arg++)
if (argv[arg][0] == '-') min_len = atoi(argv[arg] + 1);
else
input = fopen(argv[arg], "r");
if (min_len == 0) {
fprintf(stderr, "min_len = 0\n");
return -1;
}
if (input == NULL) {
perror("fopen");
return -1;
}
if (setlocale(LC_CTYPE, "") == NULL) {
perror("setlocale");
return -1;
}
buffer = malloc(min_len);
if (buffer == NULL) {
perror("malloc");
return -1;
}
while ((c = fgetc(input)) != EOF)
if (interessant(c)) switch (etat) {
case NON_PT :
etat = DEBUT_PT;
buffer[i++] = c;
break;
case DEBUT_PT :
buffer[i++] = c;
if (i == min_len) {
fwrite(buffer, i, 1, stdout);
etat = PRINT_PT;
}
break;
case PRINT_PT :
putchar(c);
} else {
if (etat == PRINT_PT) putchar('\n');
i = 0;
etat = NON_PT;
}
return 0;
}