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

Aide sur traitement du fichier

12 réponses
Avatar
Rim msedi
Salut,

J'ai un fichier qui se compose de deux champs :

- numero pr=E9sent=E9 par un entier
- attribut pr=E9sent=E9 par une chaine caract=E8re.

On a la m=EAme taille pour le champ attribut dans toutes les lignes du
fichier.

Par exemple, Soit le fichier nomm=E9 essai.txt:

1 110101
2 100101
3 110101
4 000101
5 000000
6 110101
7 110101
8 000000
9 010101
10 100101

Le travail demand=E9 est:

- Supprimer des lignes du fichier essai.txt qui contiennent comme
chaine caractere "000000"
Dans notre exemple, on doit supprimer les deux lignes suivantes:

5 000000
8 000000

-Supprimer des colonnes du la chaine attribut pour chaque ligne
sachant que cette colonne est tout =E0 0 dans toutes les chaines du
fichier.

Dans notre exemple, on remarque que la colonne 3 et 5 sont toutes =E0 0.


En conclusion, on obtient le r=E9sultat suivant qui pr=E9sente un fichier
(on peut travailler sur le m=EAme fichier ou autre)
apr=E8s la suppression des lignes et des colonnes faite :

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


Je dois faire un programme C sous Windows permettant du supprimer des
lignes et des colonnes comme d=E9crit pr=E9c=E9dament.
J'ai trouv=E9 des difficult=E9s =E0 manipuler les positions du curseur dans
un fichier de plus je ne sais pas si il y a des
fonctions pr=E9d=E9finis dans C qui permettent du supprimer des lignes et
des colonnes selon un crit=E8re.

S'il vous plait,Pouvez-vous m'aider ?

Merci.

2 réponses

1 2
Avatar
ByB
Rim msedi avait écrit le 18/07/2009 :
On 18 juil, 11:10, Christian ASTOR wrote:
Rim msedi wrote:
C'est le même fichier. Ce n'est pas çà ? Vous n'avez pas supprimé les
deux lignes portant comme chaine "000000" ?
5    000000
8    000000



Mais si, le fichier test2.txt sera :

1    110101
2    100101
3    110101
4    000101
6    110101
7    110101
9    010101
10   100101

(si le fichier test.txt a le format défini au départ bien sûr...)




Salut,

Après la compilation du votre programme , j'ai des warrings qui
peuvent être la cause à ne pas obtenir le même résultat que vous ?

Avez-vous les warrings suivants ?
1>------ Début de la génération : Projet : amani, Configuration :
Debug Win32 ------
1>Compilation en cours...
1>main.cpp
1>c:amaniamanimain.cpp(11) : warning C4996: 'fopen': This function
or variable may be unsafe. Consider using fopen_s instead. To disable
deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:program filesmicrosoft visual studio 9.0vcinclude
stdio.h(237) : voir la déclaration de 'fopen'
1>c:amaniamanimain.cpp(12) : warning C4996: 'fopen': This function
or variable may be unsafe. Consider using fopen_s instead. To disable
deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:program filesmicrosoft visual studio 9.0vcinclude
stdio.h(237) : voir la déclaration de 'fopen'
1>c:amaniamanimain.cpp(17) : warning C4996: 'strncpy': This
function or variable may be unsafe. Consider using strncpy_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help
for details.
1> c:program filesmicrosoft visual studio 9.0vcinclude
string.h(157) : voir la déclaration de 'strncpy'
1>c:amaniamanimain.cpp(19) : warning C4996: 'strncpy': This
function or variable may be unsafe. Consider using strncpy_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help
for details.
1> c:program filesmicrosoft visual studio 9.0vcinclude
string.h(157) : voir la déclaration de 'strncpy'
1>Édition des liens en cours...
1>Incorporation du manifeste en cours...
1>Le journal de génération a été enregistré à l'emplacement "file://c:
amaniamaniDebugBuildLog.htm"
1>amani - 0 erreur(s), 4 avertissement(s)
========== Génération : 1 a réussi, 0 a échoué, 0 mis à jour, 0 a été
ignoré ========= >
voici le même fichier d'input test.txt :

1 110101
2 100101
3 110101
4 000101
5 000000
6 110101
7 110101
8 000000
9 010101
10 100101

Après l'exécution, j'ai le fichier test2.txt:
1 110101
2 100101
3 110101
4 000101
5 000000
6 110101
7 110101
8 000000
9 010101
10 100101


C'est le même ! rien à changer. Si nous corrigeons les warrings alors
nous pouvons obtenir le même résultat.

J'ai quelques questions :

Quelle est la différence entre main et _tmain ?
Quelle est la différence entre strncpy() et strcpy() ?
Quelle est la différence entre char et -TCHAR ?
Quelle est le rôle du _TCHAR et tchar.h ?

C'est vraie que chaque ligne contient deux champs:
- un objet qui est présenté par un entier
- un attribut qui est présenté par une chaine de caractère.

De plus, On a tous les attributs ont la même taille. Mais, cette
taille n'est pas fixée en avance car ceci dépend d'exemple. Comment on
peut automatiser les instructions suivantes : ?

sNum[5] = ''; comment vous savez en avance que sNum est de taille
5 ?

De plus, sNum est un entier (présentant le premier champ de chaque
ligne) et n'est pas une chaine de caractère ?
Or, vous mettez dans votre code : char sNum[10]

strncpy(sAttrib, &sLine[5], 6); signifie quoi cette instruction ?

sAttrib[6] = ''; pourquoi cette instruction ?

if (strcmp(sAttrib, "000000 ") != 0) signifie quoi cette
instruction ? De plus, on n' a pas toujours "000000" çà dépend de
l'exemple

Merci.



Les warnings indiquent que des fonctions plus sécurisées que celles que
vous utilisez existent. Cela n'empêche pas que celles que vous utilisez
fonctionnent aussi.

Le type char est surtout un octet pouvant contenir une valeur de -128 à
127. Ne vou laissez pas abuser par le nom "char": (voir
http://www.commentcamarche.net/contents/cpp/cpptype.php3)

Si vous ne comprenez pas les lignes comportant des instructions
strncpy, strcmp et autres fonctions de manipulation de chaines de
caractères, je vous conseille de les étudier d'abord ... Voyez les
pages http://www.gchagnon.fr/cours/cgi/cours4.html et aussi
http://rainet.enic.fr/unit/R04/s8/frame_r04_s8.htm (cliquez sur les
noms de chapitres à gauche, et écoutez les explications données en
vidéo).

Bon courage !
Avatar
domi
Rim msedi wrote:

Salut,

Après la compilation du votre programme , j'ai des warrings qui
peuvent être la cause à ne pas obtenir le même résultat que vous ?



c'est que ton fichier ne doit pas avoir le meme format.
Mets un breakpoint sur
if (strcmp(sAttrib, "000000") != 0)
et tu regardes ce qu'il y a dans les diverses variables

Pour le reste, avant de faire un programme en C, tu devrais... apprendre
le C : lis le Kernighan & Richie (en ebook un peu partout)et tu
comprendras tout
1 2