Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2430 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  extraire d'un texte les chaines de caractères qui...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

extraire d'un texte les chaines de caractères qui...

n°1445910
tuxbleu
renie ses origines
Posté le 21-09-2006 à 17:00:11  profilanswer
 

Bonjour.
 
Je recherche, quelque soit le language, mais disons de préférence en java ou en C, un programme qui extrairais toute les chaines de caractères d'un fichier texte qui commencent par xxx ou sont encadrés par xxx et yyy
ou alors supprime tout les caractères non imprimables.
J'ai plein de fichier *.dat à parser, c'est ultra illisible.
Je vous demande pas une réponse toute prête, d'habitude je me débrouille pour mes scripts, mais je me dis on sait jamais, ca doit être un problème connu.
J'ai bien tenté une recherche sur google, mais je pense que le fait de pas trouver de réponse vient du fait que j'ai pas formulé ma recherche comme il faut.
 
J'ai bien trouvé une focntion java qui parse, mais si j'ai bon souvenir la gestion des fichiers en java m'as toujours fait galérer.
 
Bref, on sait jamais, si vous aviez un tuyau ou 2  :sweat:


Message édité par tuxbleu le 21-09-2006 à 18:53:27

---------------
Mon topic de vente - Mon feed-back
mood
Publicité
Posté le 21-09-2006 à 17:00:11  profilanswer
 

n°1445912
MagicBuzz
Posté le 21-09-2006 à 17:02:20  profilanswer
 

regarde du côté des regexp, ça semble tout désigné pour ce que tu veux faire.

n°1445920
tuxbleu
renie ses origines
Posté le 21-09-2006 à 17:13:36  profilanswer
 

MagicBuzz a écrit :

regarde du côté des regexp, ça semble tout désigné pour ce que tu veux faire.


Ok.
Je viens de tomber sur quelques scripts php qui ont l'air simpa aussi.  :jap:


---------------
Mon topic de vente - Mon feed-back
n°1445931
Elmoricq
Modérateur
Posté le 21-09-2006 à 17:30:59  profilanswer
 

Pour ce genre de travail, je te propose de le faire dans un langage de script, je pense par exemple à PERL qui est spécialisé dans ce genre de traitement (ce que tu souhaites faire s'écrit en une dizaine de lignes PERL)
Je ne connais pas PHP mais, d'après ce que j'ai pu en lire, ça ne me semble pas être un mauvais choix non plus pour ce genre de tache.
 
Sinon, que ce soit en C ou en Java, pas de difficulté particulière. Les expressions régulières ne me semblent pas être un pré-requis pour ce genre de tache, qui s'écrit très simplement sans utiliser cet outil.  
Surtout en C avec les ignobles regexp POSIX (Java utilise les regexp PERL :o ). Mais bon, ici, un strstr() suffit largement à ton besoin.

Message cité 1 fois
Message édité par Elmoricq le 21-09-2006 à 17:31:37
n°1445934
MagicBuzz
Posté le 21-09-2006 à 17:36:09  profilanswer
 

mouais, les substr... franchement, c'est se prendre la tête pour pas grand chose : aussi chiant à mettre en place, et infiniment plus lent

n°1445939
Elmoricq
Modérateur
Posté le 21-09-2006 à 17:45:37  profilanswer
 

Infiniment plus lent qu'une regexp ? [:heink]
 
Et pour le "plus chiant", je ne suis pas d'accord pour ce cas particulier où la seule tache à effectuer est justement... la recherche d'une sous-chaîne.
 
Autant utiliser les bons outils. :
 
strstr(var_chaine, "truc à chercher" )  
et  
var_chaine =~ /truc à chercher/  
 
c'est équivalent.
 
edit : évidemment, dès que la recherche devient plus complexe, l'utilisation de sous-chaînes devient archaïque


Message édité par Elmoricq le 21-09-2006 à 17:47:52
n°1445944
MagicBuzz
Posté le 21-09-2006 à 17:50:33  profilanswer
 

c'est pas ça, c'est que son truc c'est un fichier dat, je suppose qu'il veut chercher beaucoup d'occurences dans ce fichier
et du coup, faire des substr, ça fait une tétrachiée d'allocations mémoires pas optimisées, alors que regexp est prévu pour ça, avec des algo infiniment plus adaptés

n°1445947
Elmoricq
Modérateur
Posté le 21-09-2006 à 17:53:45  profilanswer
 

J'suis en train de parler du strstr() du C, qui retourne un pointeur sur la chaîne trouvée [:mlc]

n°1445948
MagicBuzz
Posté le 21-09-2006 à 17:56:07  profilanswer
 

et ta chaine, t'en fait quoi après ? ds cotillons ?
si tu dois en concaténer plusieurs, je vois pas comment tu vas faire sans recopier chaque sous-chaîne pour les mettre bout à bout
 
à moins de se lancer dans un algo pompeu (mettre tous les pointeurs bout à bout dans un array, puis mesurer la longueur totale des sous-chaîne avant d'en allouer une en mémoire et tout recopier dedans en une fois), je vois pas trop cequetu vas faire.
le regexp va te permettre de faire abstraction de tout ça, c'est quand même pas mal moi je trouve...

Message cité 1 fois
Message édité par MagicBuzz le 21-09-2006 à 17:58:40
n°1445951
Elmoricq
Modérateur
Posté le 21-09-2006 à 18:18:46  profilanswer
 

MagicBuzz a écrit :

et ta chaine, t'en fait quoi après ? ds cotillons ?


 

Citation :

Je recherche, quelque soit le language, mais disons de préférence en java ou en C, un programme qui extrairais toute les chaines de caractères d'un fichier texte qui commencent par xxx ou sont encadrés par xxx et yyy


 

const char *debut = strstr(chaine, "xxx" ),
           *fin = strstr(chaine, "yyy" );
 
while ( debut && fin && debut +strlen("xxx" ) < fin )
{
   /* faire joujou avec la chaine trouvee */
 
   debut = strstr(fin+strlen(fin), "xxx" );
   fin = strstr(fin+strlen(fin), "yyy" );
}


 
 
Soyons clair, je ne parle que de cas précis, où la tache à réaliser est très simple. En C, utiliser les regexp suppose d'inclure regexp.h qui est POSIX.2 (donc très portable, mais pas totalement portable), et de faire appel à des fonctions plus lourdes.
 
 
Par contre, si je faisais ça en PERL, je ne m'embêterais pas :

while ( $chaine =~ /xxx(.*?)yyy/cg )
{
   /* faire joujou avec la chaine trouvee ($1) */
}
 


 
 
Mais c'est vrai que mes messages précédents n'étaient pas très précis quant aux langages évoqués.


Message édité par Elmoricq le 21-09-2006 à 18:21:53
mood
Publicité
Posté le 21-09-2006 à 18:18:46  profilanswer
 

n°1445960
tuxbleu
renie ses origines
Posté le 21-09-2006 à 18:51:55  profilanswer
 

Bon, j'ai attacké en php.
 
J'ai dégrossi la situation :  
J'ai viré les caractères non imprimables et un autre caractère illisible qui me  pourrissait la lecture.
maintenant j'essai de conserver tout ce qui est entre tel expression et telle expression, mais la je lutte, ce que j'ai réussi à faire m'a fait exactement le contraire, ca m'a viré ce que je voulais garder :sweat:


Message édité par tuxbleu le 21-09-2006 à 18:52:36

---------------
Mon topic de vente - Mon feed-back
n°1446101
tuxbleu
renie ses origines
Posté le 22-09-2006 à 09:55:07  profilanswer
 

Hummm, je solicite votre aide
Tout ce que je souhaite conserver est entre <a href ...  </a>
Ro mais j'y arrive pas :sweat:


---------------
Mon topic de vente - Mon feed-back
n°1446106
anapajari
s/travail/glanding on hfr/gs;
Posté le 22-09-2006 à 10:02:15  profilanswer
 

Elmoricq a écrit :

Pour ce genre de travail, je te propose de le faire dans un langage de script, je pense par exemple à PERL qui est spécialisé dans ce genre de traitement (ce que tu souhaites faire s'écrit en une dizaine de lignes PERL)
Je ne connais pas PHP mais, d'après ce que j'ai pu en lire, ça ne me semble pas être un mauvais choix non plus pour ce genre de tache.


Remarque: Les regex en PHP sont bien moins rapides qu'en perl, et plus le fichier est gros plus la différence est flagrante.
 

tuxbleu a écrit :

Hummm, je solicite votre aide
Tout ce que je souhaite conserver est entre <a href ...  </a>
Ro mais j'y arrive pas :sweat:


Montre ton code :o
mais la regex doit être un truc comme ça:

/<a href(.*?)<\/a>/


 

n°1446312
tuxbleu
renie ses origines
Posté le 22-09-2006 à 14:31:31  profilanswer
 

La "performance" de mon code ne m'interesse pas.
Ja veux juste que ca parse.
Bon, j'ai bien avancé, j'ai juste une chaine de cractère parasitaire à faire sauter, mais ca va pas être compliqué.
Merci pour les indications.


---------------
Mon topic de vente - Mon feed-back

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  extraire d'un texte les chaines de caractères qui...

 

Sujets relatifs
[SQL] Compter le nombre de 'a' dans le texte d'un champExtraire des adresses email dans un gros fichier texte
Modifier du texte sur une page avec une action en JSinserer des caracteres corréens dans un fichier XML
[PHP... ou autres] trouver les termes liés dans un texteInfo bulles : Texte ou JPG
[résolu] [Javascript] Alert et caractères spéciauxtexte dynamique
[postgres] Extraire les champs clé primaire d'une table 
Plus de sujets relatifs à : extraire d'un texte les chaines de caractères qui...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR