A voir également:
- Linux
- Linux reader - Télécharger - Stockage
- Backtrack linux - Télécharger - Sécurité
- R-linux - Télécharger - Sauvegarde
- Toutou linux - Télécharger - Systèmes d'exploitation
- Damn small linux - Télécharger - Systèmes d'exploitation
9 réponses
tu veux supprimer la ligne n
En gros, c ça, ce code est très très très sale et je parierais qu'il est meme faux en partie, mais j'ai pas le temps de vérifier ;p A toi de bosser maintenant ;p
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
//disons que ton texte est dans s :
int i=0;
int num_l=1;
int debut_l;
while(s[i]!='\0' && num_l!=n)
{
if(s[i]=='\n')
num_l++;
i++;
}
debut_l=i;
//tu avances jusqu'à la fin de la ligne en cours :
while(s[i]!='\0' && s[i]!='\n' )
i++;
strcpy(s+debut_l, s+i);
En gros, c ça, ce code est très très très sale et je parierais qu'il est meme faux en partie, mais j'ai pas le temps de vérifier ;p A toi de bosser maintenant ;p
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Bonjour emili!
En realite Batman repond parfaitement a ta question.
Il n'existe pas de fonction pour faire ce que tu veut, il faut la creer.
Ce que je rajouterai a son code:
FILE f;
char s [taille_max];
int i=0;
if ( (f=fopen("fichier.txt","rb"))!=0)
{
while ( (s[i++]=fgetc(f))!= '\0');
s[i]='\0';
fclose(f);
Fonction_de_Batman(s,ligne_a_effacer);
if ( (f=fopen("fichier.txt","wb"))!=0)
{
write(s,1,i,f);
fclose(f);
printf("\nLigne efface");
}
else printf("Erreur d'ecriture");
}
else printf("impossible d'ouvrir le fichier");
Voila qui devrait resoudre ton probleme...
PS: Je ne crois pas que mon code soit tres propre non plus, ni meme qu'il n'y a aucune erreur, mais s'il y en a elle vienne surement des erreurs d'indice ou du fait que je me souvienne plus tres bien des fonction c (write par exemple)
En realite Batman repond parfaitement a ta question.
Il n'existe pas de fonction pour faire ce que tu veut, il faut la creer.
Ce que je rajouterai a son code:
FILE f;
char s [taille_max];
int i=0;
if ( (f=fopen("fichier.txt","rb"))!=0)
{
while ( (s[i++]=fgetc(f))!= '\0');
s[i]='\0';
fclose(f);
Fonction_de_Batman(s,ligne_a_effacer);
if ( (f=fopen("fichier.txt","wb"))!=0)
{
write(s,1,i,f);
fclose(f);
printf("\nLigne efface");
}
else printf("Erreur d'ecriture");
}
else printf("impossible d'ouvrir le fichier");
Voila qui devrait resoudre ton probleme...
PS: Je ne crois pas que mon code soit tres propre non plus, ni meme qu'il n'y a aucune erreur, mais s'il y en a elle vienne surement des erreurs d'indice ou du fait que je me souvienne plus tres bien des fonction c (write par exemple)
Comme stéphane : ya pas de fct en C pour faire ça...
Mais au fait : c'est pour un programme en C obligatoirement ? parce que si ce n'est pas obligatoire, tu peux le faire assez simplement à la ligne de commande sous unix/linux... Si ça t'interesse, fais moi signe ...
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Mais au fait : c'est pour un programme en C obligatoirement ? parce que si ce n'est pas obligatoire, tu peux le faire assez simplement à la ligne de commande sous unix/linux... Si ça t'interesse, fais moi signe ...
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
head -$(( $1-1 )) $2 > tmp.dellignes && tail -$(( `wc -l $2 | tr -s ' ' | cut -d' ' -f"2"`-$1 )) $2 >>tmp.dellignes && mv tmp.dellignes $2
Tu remplaces $1 par le numéro de ligne, et $2 par le nom du fichier dont tu veux virer la nieme ligne.
Je viens de tester, ça a l'air de fonctionner. Par contre :
1) teste bien que la ligne demandée n'est pas supérieure au numéro de ligne maximal
2) teste que c'est bien un entier que tu passes.
3) Pour faire ton appel, tu vas devoir faire comme ça :
a) disons que dans n se trouve le numéro de ligne que tu as vérifié au préalable
b) dans char *fic : le nom du fichier :
En y regardant à deux fois, finalement c ptete plus propre en C ;p
Voilà... Dis moi si ça tourne ;p
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Tu remplaces $1 par le numéro de ligne, et $2 par le nom du fichier dont tu veux virer la nieme ligne.
Je viens de tester, ça a l'air de fonctionner. Par contre :
1) teste bien que la ligne demandée n'est pas supérieure au numéro de ligne maximal
2) teste que c'est bien un entier que tu passes.
3) Pour faire ton appel, tu vas devoir faire comme ça :
a) disons que dans n se trouve le numéro de ligne que tu as vérifié au préalable
b) dans char *fic : le nom du fichier :
char string_call[200];// tu peux faire plus fin en prenant la taille
//exacte de la chaine, mais 200 seront en tout cas suffisant en statique
sprintf(string_call, ""head -%d %s > %s && tail -$(( `wc -l %s | tr -s ' ' | cut -d' ' -f"2"`-%d )) %s >>%s && mv %s %s", (n-1) , fic, tmp,fic,n,fic, tmp, tmp, fic);
//et là tu fais l'appel système
system(string_call);
En y regardant à deux fois, finalement c ptete plus propre en C ;p
Voilà... Dis moi si ça tourne ;p
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
t genial au fait mon adresse c'est
nhtiti@voila.fr et non pas hntiti désolé!!!
jpe pas tester chez moi jai pas encore installé linux sa ne saurai tardé!!!!!
j'essairai mardi a la fac et jte dirais sa merci encore pour le temps que tu prends a aider et a chercher.
a+ merci encore Batmap
nhtiti@voila.fr et non pas hntiti désolé!!!
jpe pas tester chez moi jai pas encore installé linux sa ne saurai tardé!!!!!
j'essairai mardi a la fac et jte dirais sa merci encore pour le temps que tu prends a aider et a chercher.
a+ merci encore Batmap
De rien, mais c batmaT (pas un p :) )
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?