j'arrive pas à faire simple [finallement si]

j'arrive pas à faire simple [finallement si] - C++ - Programmation

Marsh Posté le 01-07-2002 à 17:32:36    

g un magnifique tableau de char* qui contient des noms de fichiers que je dois parser. ces noms sont tous construit de la même manière:
(partievariable)_référence.extension
 
si 2 fichiers ont la même référence, il faut les concatener  dans un 3ème en lui donnant cette même référence (qui commence toujours par "per", donc facilement repèrable avec un strstr).
 
au final je veux avoir un tbleau qui contient le nom des fichiers concaténés et le nom des fichiers qui était seuls sur une reference
pour concatener :
 
for(i=0;i<taille_tableau;i++){
   recuperer partie commune avec strstr
    for (j=i+1;j<taille_tableau;j++)
        /*si jeme element a meme partie fixe que ieme, concatener dans nouveau fichier*/
         
en fait, je n'arrive pas à faire simple pour construire le tableau resultat


Message édité par prettysmile le 02-07-2002 à 11:03:29
Reply

Marsh Posté le 01-07-2002 à 17:32:36   

Reply

Marsh Posté le 01-07-2002 à 17:43:14    

je comprends ce que tu veux, mais c'est le 3eme fichier que j'ai du mal à visualiser.
 
peux tu donner un exemple de 2 nom de fichiers qui doivent être concaténés, et un exemple du 3eme nom de fichier résultant ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 01-07-2002 à 18:09:29    

prettysmile a écrit a écrit :

g un magnifique tableau de char* qui contient des noms de fichiers que je dois parser. ces noms sont tous construit de la même manière:
(partievariable)_référence.extension
 
si 2 fichiers ont la même référence, il faut les concatener  dans un 3ème en lui donnant cette même référence (qui commence toujours par "per", donc facilement repèrable avec un strstr).
 
au final je veux avoir un tbleau qui contient le nom des fichiers concaténés et le nom des fichiers qui était seuls sur une reference
pour concatener :
 
for(i=0;i<taille_tableau;i++){
   recuperer partie commune avec strstr
    for (j=i+1;j<taille_tableau;j++)
        /*si jeme element a meme partie fixe que ieme, concatener dans nouveau fichier*/
         
en fait, je n'arrive pas à faire simple pour construire le tableau resultat




Tu ne peux pas utiliser strstr car sinon que se passerait il si dans la partie variable il y a egalement "per" ? Je te conseille plutot de reperer la reference en partant de la fin!


---------------
LOVE & PEACE !!! [:kirvel]
Reply

Marsh Posté le 01-07-2002 à 18:20:25    

Harkonnen a écrit a écrit :

je comprends ce que tu veux, mais c'est le 3eme fichier que j'ai du mal à visualiser.
 
peux tu donner un exemple de 2 nom de fichiers qui doivent être concaténés, et un exemple du 3eme nom de fichier résultant ?




en gros :
pretty1_per305_0 et pretty2_per305_0 donne per305_0 (je vais pas me pourrir la vie a construire des jolis noms de fichiers), normalement il ne peut pas y avoir per ailleurs que dans la partie fixe ou il est toujours précédé de _ donc pas de pb pour concatener.
le problème c'est de conserver le nom de tous les fichiers+les concaténés-le fichiers utilisés pour concaténés
 :pt1cable:  
 
 

Reply

Marsh Posté le 02-07-2002 à 08:28:46    

petit up du matin, si qqu'un a une id avant que je ne le fasse version pur bourrin

Reply

Marsh Posté le 02-07-2002 à 08:46:18    

prettysmile a écrit a écrit :

petit up du matin, si qqu'un a une id avant que je ne le fasse version pur bourrin




 
il te faut :
 - la liste des noms de fichiers d'origine et pour chaque fichier, un numero de fichier destination.
 - la liste des noms de fichiers destination que tu construits au fur et a mesure.
 
ex :  

Code :
  1. nom_fichier1 = {"tfsdfhjksl_toto.ref", "rhbjfkjsdfnlk_toto.txt", "hjdfshklsdgd_toti.jpg"};
  2. numero_fichier1 = {-1, -1, -1};
  3. nb_fichier1=3;
  4. nom_fichier2 = {"","",""};
  5. nb_fichier2 = 0;
  6. pour chaque fichier de la liste 1 => i
  7.     extraire_reference(nomfichier1[i]);
  8.     rechercher_la_reference_dans_la_liste_2;
  9.     si elle existe, mettre son numero (indice) dans numero_fichier1[i];
  10.     sinon l'ajouter à la position nb_fichier3;
  11.     nb_fichier3++;
  12. a la fin tu dois avoir ça :
  13. numero_fichier1 = {0, 0, 1};
  14. nom_fichier2 = {"toto.ref","toti.jpg",""};
  15. nb_fichier2 = 2;


 
Voila, c'est fait rapidement mais ça doit marcher !!!
Euh comment tu gères : references identiques mais extensions differentss ?


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 02-07-2002 à 09:00:19    

DarkOli a écrit a écrit :

 
Voila, c'est fait rapidement mais ça doit marcher !!!
Euh comment tu gères : references identiques mais extensions differentss ?




1-merci je regarde ce que ça donne
2-normalement il ne doit pas y avoir d'extension différente (je ne suis pas non plus la fée clochette!!)

Reply

Marsh Posté le 02-07-2002 à 09:17:37    

moi j'avais une autre idée : faire une 1ere passe, en stockant d'abord tous les fichiers de même référence dans une hashtable et les autres dans un tableau simple.
puis faire une 2eme passe, en parcourant la hashtable, et en concaténant les fichiers de même référence (qui normalement sont sur 2 lignes consécutives de la hashtable)
 
tu obtiens au final un tableau de fichiers concaténés obtenu à partir de la hashtable, et un tableau de fichiers isolés


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-07-2002 à 09:40:41    

->avec qsort trier mon tableau par reference (je dois pouvoir gruger une onction qui renvoie 0 si égalité de réf et toujours -1 sinon)
->concatener toutes les memes reference dans un fichier (au pire un fichier concatené en lui meme)
->parser les fichiers concaténés (si je leur donne un nom suffisamment con, y'aura pas de pb pour les retrouver)
->détruire les fichiers concaténés
ça m'a l'air faisable et n'utilise pas trop de tableaux  [:shiryu]  (je m'y lance , merci pour votre aide)

Reply

Marsh Posté le 02-07-2002 à 11:03:00    

donc ca marche, pas avec qsort (pas de longueur fixe pour les noms de fichiers a passer en 3eme argument,  il n'appréciait pas vraiement) mais avec un bête algo de quick sort écrit a mano

Reply

Marsh Posté le 02-07-2002 à 11:03:00   

Reply

Marsh Posté le 02-07-2002 à 11:14:31    

prettysmile a écrit a écrit :

donc ca marche, pas avec qsort (pas de longueur fixe pour les noms de fichiers a passer en 3eme argument,  il n'appréciait pas vraiement) mais avec un bête algo de quick sort écrit a mano
 




 
Tien moi aussi je me retrouve a faire un truc comme toi.
J'ai une liste de fichier du genre tototo_99999.log et je dois recuperer celui qui a le plus grand numero pour en creer un avec un numero plus grand !!!


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 02-07-2002 à 11:18:44    

DarkOli a écrit a écrit :

 
 
Tien moi aussi je me retrouve a faire un truc comme toi.
J'ai une liste de fichier du genre tototo_99999.log et je dois recuperer celui qui a le plus grand numero pour en creer un avec un numero plus grand !!!




ben bon courage  :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed