Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

traitement du fichier

38 réponses
Avatar
programmation
Salut,

J'ai un fichier texte bien form=E9 contient deux champs: objet et
attribut.
tous les objets sont des entiers et tous les attributs sont de chaines
de caract=E8res de m=EAme taille.
chaque ligne contient un objet et son attribut par exemple:

essai.txt:

1 11100

2 10101

3 01001

4 10001


Je voudrais supprimer les 0 de m=EAme position dans chaque chaine de
caract=E8re.
Par exemple dans notre cas, nous allons supprimer les 0 dans la
position 4 de chaque chaine car dans cette position nous avons toutes
les chaines sont =E0 0.

le r=E9sultat est :


1 1110

2 1011

3 0101

4 1001

j'ai trouv=E9 une difficult=E9 de r=E9soudre ce probl=E8me, de plus imagine=
z
si nous avons un fichier volumineux.

SVP, j'ai besoin de vos aides.

10 réponses

1 2 3 4
Avatar
Christian ASTOR
programmation wrote:

- Où est la fonction qsort() ?



http://lmgtfy.com/?q=qsort

- Quelle est la fonction de comparaison ?



Ta fonction pour compter les "1" pour trier !
Avatar
programmation
On 21 juil, 21:15, Christian ASTOR wrote:
programmation wrote:
> -  Où est la fonction qsort() ?

http://lmgtfy.com/?q=qsort

> - Quelle est la fonction de comparaison ?

Ta fonction pour compter les "1" pour trier !



Salut,

Je trouve la fonction prédefinie qsort() dans le lien suivant:
http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/

- C'est cette fonction que vous me parlez ?

- Est ce que cette fonction est implémenté par un tri rapide ou
autre ?

- Cette fonction fait un tri croissant alors comment je vais la
changer pour quelle puisse faire un tri décroissant ?
Avatar
Christian ASTOR
programmation wrote:

Je trouve la fonction prédefinie qsort() dans le lien suivant:
http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/
- C'est cette fonction que vous me parlez ?



Bein sûr, qsort() est une fonction standard.

- Est ce que cette fonction est implémenté par un tri rapide ou
autre ?
- Cette fonction fait un tri croissant alors comment je vais la
changer pour quelle puisse faire un tri décroissant ?



Un tri croissant ?!
Elle fait un quick sort comme son nom l'indique, avec la fonction de
comparaison en 4ème paramètre où tu mets ton test sur le nombre de "1"
Ici dans l'exemple, en premier paramètre, c'est donc dataTabString..
Avatar
programmation
On 22 juil, 00:15, Christian ASTOR wrote:
programmation wrote:
> Je trouve la fonction prédefinie qsort() dans le lien suivant:
>http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/
> - C'est cette fonction que vous me parlez ?

Bein sûr, qsort() est une fonction standard.

> - Est ce que cette fonction est  implémenté par un tri rapide ou
> autre ?
> - Cette fonction fait un tri croissant alors comment je vais la
> changer pour quelle puisse faire un tri décroissant ?

Un tri croissant ?!
Elle fait un quick sort comme son nom l'indique, avec la fonction de
comparaison en 4ème paramètre où tu mets ton test sur le nombre de "1"
Ici dans l'exemple, en premier paramètre, c'est donc dataTabString..




Salut,
Voici un exemple de l'utilisation de la fonction qsort() :
/* qsort example */
#include <stdio.h>
#include <stdlib.h>

int values[] = { 40, 10, 100, 90, 20, 25 };

int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}

int main ()
{
int n;
qsort (values, 6, sizeof(int), compare);
for (n=0; n<6; n++)
printf ("%d ",values[n]);
return 0;
}


Voici la fonction qui compte le nombre de 1 dans le deuxième champ:

int compte( ch)
char ch[32]
{
int i,k=0;
for(i=0; i < strlen (ch) ; i++)
{
if (ch[i] = '1');
k++;
}
return (k);

}

je vais appeler cette fonction pour chaque ligne de fichier lors de
chargement de fichier dans le tableau dataTabString.
Donc on a besoin de troisième élément par exemple nombre dans la
structure dataStruct:
typedef struct dataStruct
{
char sNum[6];
char sAttrib[32];
int nombre

} dataStruct;

dataStruct *dataTabString;

nombre = compte (dataTabString.sAttrib) ;

- Donc, avec quels paramètre je vais appeler la fonction qsort() ?
- Quel est le contenu et le code de quatrième paramètre du fonction
qsort() ?
- c'est possible d'adapter le qsort() pour faire un tri décroissant
sur le tableau et au niveau de deuxième champ sAttrib ?

Merci.
Avatar
Christian ASTOR
programmation wrote:

Voici un exemple de l'utilisation de la fonction qsort() :



Pourquoi mets-tu l'exemple de la doc ?

Donc on a besoin de troisième élément par exemple nombre dans la
structure dataStruct:



Non, pas utile.

- Quel est le contenu et le code de quatrième paramètre du fonction
qsort() ?




Comme le code de la doc (compare()).
Avec à l'intérieur ton calcul de "1" pour déterminer le tri, sur le
membre sAttrib de la structure.
Avatar
programmation
On 22 juil, 00:15, Christian ASTOR wrote:
programmation wrote:
> Je trouve la fonction prédefinie qsort() dans le lien suivant:
>http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/
> - C'est cette fonction que vous me parlez ?

Bein sûr, qsort() est une fonction standard.

> - Est ce que cette fonction est  implémenté par un tri rapide ou
> autre ?
> - Cette fonction fait un tri croissant alors comment je vais la
> changer pour quelle puisse faire un tri décroissant ?

Un tri croissant ?!
Elle fait un quick sort comme son nom l'indique, avec la fonction de
comparaison en 4ème paramètre où tu mets ton test sur le nombre de "1"
Ici dans l'exemple, en premier paramètre, c'est donc dataTabString..



Salut,

Voici une partie de programme :

typedef struct dataStruct
{
int cin;
char indication[32];
int nombre; //contient le nombre de 1 dans le deuxème champ
indication donc je vais faireun tri décroissant sur ce nombre

} dataStruct;

int callbackfunc(const void* va,const void* vb)
{
dataStruct* a,b;
a = (dataStruct*)va;
b = (dataStruct*)vb;

return (b.nombre - a.nombre);

// ici, tu as 2 elements a et b, a toi de coder la comparaison : si
a<b (selon ton critere) renvoie 1, sinon renvoie 0.

}

int main()
{

....
....
qsort(dataTabString,nCpt,sizeof(dataStruct),callbackfunc);


...

}


Après la compilation, j'ai le message d'erreur dans le fonction
callbackfunc :

Error: incompatible types assignment
Error: request for member 'nombre' in something not a structure or
union

Merci.
Avatar
programmation
On 22 juil, 00:15, Christian ASTOR wrote:
programmation wrote:
> Je trouve la fonction prédefinie qsort() dans le lien suivant:
>http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/
> - C'est cette fonction que vous me parlez ?

Bein sûr, qsort() est une fonction standard.

> - Est ce que cette fonction est  implémenté par un tri rapide ou
> autre ?
> - Cette fonction fait un tri croissant alors comment je vais la
> changer pour quelle puisse faire un tri décroissant ?

Un tri croissant ?!
Elle fait un quick sort comme son nom l'indique, avec la fonction de
comparaison en 4ème paramètre où tu mets ton test sur le nombre de "1"
Ici dans l'exemple, en premier paramètre, c'est donc dataTabString..



Salut,

Voici une partie de programme :

typedef struct dataStruct
{
int cin;
char indication[32];
int nombre; //contient le nombre des 1 dans le deuxème champ
indication donc je vais faireun tri décroissant sur ce nombre

} dataStruct;

int compare(const void* va,const void* vb)
{
dataStruct* a,b;
a = (dataStruct*)va;
b = (dataStruct*)vb;

return (b.nombre - a.nombre);

// ici, tu as 2 elements a et b, a toi de coder la comparaison : si
a<b (selon ton critere) renvoie 1, sinon renvoie 0.

}

int main()
{

....
....
qsort(dataTabString,nCpt,sizeof(dataStruct),compare);


...

}


Après la compilation, j'ai le message d'erreur dans le fonction
compare:

Error: incompatible types assignment
Error: request for member 'nombre' in something not a structure or
union

Avez-vous une idée ?
Avatar
programmation
On 22 juil, 00:15, Christian ASTOR wrote:
programmation wrote:
> Je trouve la fonction prédefinie qsort() dans le lien suivant:
>http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/
> - C'est cette fonction que vous me parlez ?

Bein sûr, qsort() est une fonction standard.

> - Est ce que cette fonction est  implémenté par un tri rapide ou
> autre ?
> - Cette fonction fait un tri croissant alors comment je vais la
> changer pour quelle puisse faire un tri décroissant ?

Un tri croissant ?!
Elle fait un quick sort comme son nom l'indique, avec la fonction de
comparaison en 4ème paramètre où tu mets ton test sur le nombre de "1"
Ici dans l'exemple, en premier paramètre, c'est donc dataTabString..



Salut,

Je vous remercie pour votre aide.

Après le tri de fichier. Il me manque une partie concernant
l'indexation du ce fichier. Je ne sais pas si s'appelle indexation ou
autre.

Soit essai.txt le fichier trié:

3 1111
6 1111
1 1111
10 1011
9 0111
2 1011
4 0011

Ce fichier contient deux champs: cin (un entier) et indication (une
chaine de caractère)

Je voudrais décomposer ce fichier en sous fichiers de manière que
chaque sous ficher contient le même nombre du caractère 1 dans son
deuxième champ appelé indication.
Puisque le fichier est trié dans le sens décroissant ceci nous aide
pour faire ceci.

Après la décomposition, Je vais exécuter le même traitement sur cha que
sous fichier obtenu.



Je dois obtenir le résultat suivant:
essai1.txt :
3 1111
6 1111
1 1111

essai2.txt :
10 1011
9 0111
2 1011

essai3.txt :
4 0011


Comme vous voyez le fichier essai1.txt contient les cin qui ont quatre
1 dans leurs indications,
le fichier essai2.txt contient les cin qui ont trois 1 dans leurs
indications,
le fichier essai3.txt contient les cin qui ont deux 1 dans leurs
indications.

S'il vous plaît, Avez-vous une idée comment je vais décomposer le
fichier trié de grande taille en sous fichiers de taille moins ?

et comment je vais accéder après à ces sous fichiers ?


Merci.
Avatar
programmation
On 22 juil, 00:39, programmation wrote:
On 22 juil, 00:15, Christian ASTOR wrote:



> programmation wrote:
> > Je trouve la fonction prédefinie qsort() dans le lien suivant:
> >http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/
> > - C'est cette fonction que vous me parlez ?

> Bein sûr, qsort() est une fonction standard.

> > - Est ce que cette fonction est  implémenté par un tri rapide o u
> > autre ?
> > - Cette fonction fait un tri croissant alors comment je vais la
> > changer pour quelle puisse faire un tri décroissant ?

> Un tri croissant ?!
> Elle fait un quick sort comme son nom l'indique, avec la fonction de
> comparaison en 4ème paramètre où tu mets ton test sur le nombre d e "1"
> Ici dans l'exemple, en premier paramètre, c'est donc dataTabString..

Salut,
Voici un exemple de l'utilisation de la fonction qsort() :
/* qsort example */
#include <stdio.h>
#include <stdlib.h>

int values[] = { 40, 10, 100, 90, 20, 25 };

int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );

}

int main ()
{
  int n;
  qsort (values, 6, sizeof(int), compare);
  for (n=0; n<6; n++)
     printf ("%d ",values[n]);
  return 0;

}

Voici la fonction qui compte le nombre de 1 dans le deuxième champ:

int compte( ch)
char ch[32]
{
     int i,k=0;
     for(i=0; i < strlen (ch) ; i++)
     {
                if (ch[i] = '1');
                 k++;
     }
  return (k);

}

je vais appeler cette fonction pour chaque ligne de fichier lors de
chargement de fichier dans le tableau dataTabString.
Donc on a besoin de troisième élément par exemple nombre dans la
structure dataStruct:
typedef struct dataStruct
{
   char sNum[6];
   char sAttrib[32];
   int nombre

} dataStruct;

    dataStruct *dataTabString;

nombre = compte (dataTabString.sAttrib) ;

- Donc, avec quels paramètre je vais appeler la fonction qsort() ?
- Quel est le contenu et le code de quatrième paramètre du fonction
qsort() ?
- c'est possible d'adapter le qsort() pour faire un tri décroissant
sur le tableau et au niveau de deuxième champ sAttrib ?

Merci.



Salut Christian ASTOR ,


Je voudrais afficher les positions qui contiennent le caractère 0 dans
le deuxième champ attribut du fichier.
Je n'arrive pas comment je vais déterminer ces positions dans votre
programme suivant :

#include <tchar.h>
#include <iostream>

#define MAXLINE 1024
#define STEP 10

typedef struct dataStruct
{
char sNum[6];
char sAttrib[32];

} dataStruct;

int _tmain(int argc, _TCHAR* argv[])
{
char sLine[MAXLINE];
int nColumn[32] = {0}, nCpt = 0, nAttribLength= 0,
nMaxAttribLength = 0;
FILE *pFile, *pFileOut;
pFile = fopen("test.txt","r");
pFileOut = fopen("test2.txt","w");
int dataTabStringMax = STEP;
dataStruct *dataTabString;
if (pFile && pFileOut)
{
dataTabString = (dataStruct *) malloc(dataTabStringMax
*
sizeof(dataStruct));
while (fgets(sLine, MAXLINE, pFile))
{
strncpy(dataTabString[nCpt].sNum, sLine, 5);
dataTabString[nCpt].sNum[5] = '';
nAttribLength = strlen(sLine)-6;
if (nAttribLength>0)
{
strncpy(dataTabString[nCpt].sAttrib,
&sLine[5], nAttribLength);
dataTabString[nCpt].sAttrib
[nAttribLength] = '';
for (int i = 0; i<nAttribLength; i++)
{
if (dataTabString->sAttrib[i]
== '0')
nColumn[i]+=1;
}
nCpt+=1;
if (nAttribLength > nMaxAttribLength)
nMaxAttribLength =
nAttribLength;
}
if (nCpt == dataTabStringMax)
{
dataTabStringMax += STEP;
dataTabString = (dataStruct *) realloc
(dataTabString,
dataTabStringMax * sizeof
(dataStruct));
if (dataTabString == NULL)
exit(1);
}
}
// Lecture tableau de structures pour supprimer les
"0"
for (int j = 0; j<nCpt; j++)
{
int nShift = 0;
for (int i = 0; i<nMaxAttribLength; i++)
{
if (nColumn[i] == nCpt)
{
memmove(&dataTabString
[j].sAttrib[i-nShift],
&dataTabString[j].sAttrib[i-nShift+1],
strlen(&dataTabString[j].sAttrib[i-nShift+1]) + 1);
nShift+=1;
}
}
if (strcspn (dataTabString[j].sAttrib, "1") <
strlen(dataTabString[j].sAttrib))
fprintf(pFileOut, "%s%sn",
dataTabString[j].sNum,
dataTabString[j].sAttrib);
}

free(dataTabString);
fclose(pFile);
fclose(pFileOut);
}
return 0;
}

S'il vous plaît, pouvez- vous m'aider ?
Avatar
Christian ASTOR
programmation wrote:

Je voudrais afficher les positions qui contiennent le caractère 0 dans
le deuxième champ attribut du fichier.



Je ne comprends pas : tu les as les positions, par exemple quand tu fais
ta fonction pour compter les "1", tu scannes bien ta chaîne et testes si
chaque caractère (donc position dans la chaîne) est == '1' ...
1 2 3 4