Parser et tester un fichier txt volumineux

jimichili -  
 jimichili -
Bonjour,

J'ai un fichier .txt d'une taille de 300 Mo contenant plusieurs milliers de lignes de la forme suivante :
X Y Z
ou X, Y Z sont des nombres séparés par un espace.
je cherche un logiciel ou un bout de code me permettant de ne garder que les lignes où les nombres X et Y sont dans des intervalles donnés du type a<X<b et c<Y<d.

Pourriez-vous me conseiller qqch d'assez simple et robuste vu la taille du fichier, (sous windows ou linux), ?
Merci

JM
A voir également:

3 réponses

jimichili
 
Merci à vous deux pour la rapidité de vos réponses. Je teste ça demain matin !
0
dubcek Messages postés 19025 Date d'inscription   Statut Contributeur Dernière intervention   5 640
 
hello
avec awk, aussi disponible pour Windows
awk '$1 > a && $1 < b && $2 > c && $2 < d {print $0}'
-1
kilian Messages postés 8854 Statut Modérateur 1 526
 
Salut,

Un algo qui serait simple, peu consommateur de mémoire et je pense assez rapide:
//Remplace a,b,c et d par tes constantes
#define LIGNE_CORRECTE(X,Y) (a<X && X<b && c<Y && Y<d)

int main()
{
    int x, y, z;

    FILE *ancien = fopen("ancien.txt", "r");
    FILE *nouveau = fopen("nouveau.txt", "w");

    while (fscanf(ancien, "%d %d %d", &x, &y, &z)) {
        if (LIGNE_CORRECTE(x,y))
            fprintf(nouveau, "%d %d %d", x, y, z);
    }
    fclose(ancien);
    fclose(nouveau)
    return 0;
}


-1