Insérer la valeur d'une variable au milieu d'une chaine de caracter [C] - Programmation
Marsh Posté le 06-02-2002 à 13:08:04
variable[i] c une phrase ??
et puis ca:
Code :
|
ca marchera jamais !
et tu veux koi, que ca affiche sur l'ecran chaque truc?
et puis tu insere a quel position, puisque je pense pas que tu mettra blabla...
Marsh Posté le 06-02-2002 à 13:21:53
Code :
|
Marsh Posté le 06-02-2002 à 13:29:08
C'est pour écrire chaque ligne dans un fichier ...
variable est une chaine de caracteres
je veux dans mon fichier:
"BLABLA BLA variable[1] BLOBLO"
"BLABLA BLA variable[2] BLOBLO"
"BLABLA BLA variable[3] BLOBLO"
...
"BLABLA BLA variable[100] BLOBLO"
*variable[total] est pour moi un tableau de chaine de caratere que je lirais dans un autre fichier ... ( Et je bloque en ce moment là dessus )
Lorsque je fais fscanf(variable[i], "%s", fic); j'ai une erreur quio n'apparait pas a la compil mais au debug ... ( variable = NULL )
[edtdd]--Message édité par paranoidandroid--[/edtdd]
Marsh Posté le 06-02-2002 à 13:31:39
ben regarde la liste de parametres de fscanf ...
t'as tout inversé !
Marsh Posté le 06-02-2002 à 13:34:42
HelloWorld a écrit a écrit : ben regarde la liste de parametres de fscanf ... t'as tout inversé ! |
je n'ai pas le fichier debvant les yeux pour ecrire le post ...
il s'agit bien de fscanf(fic, "%s", variable[i]);
Marsh Posté le 06-02-2002 à 13:45:11
Ben dans ce cas alors c'est normal aussi : tu lui donne l'adresse d'une variable où stocker la chaine (variable[i]) mais celle-ci n'existe pas (variable[i] est donc à NULL, d'où ton erreur)
T'as bien créé des pointeurs (char *variable[total] mais ceux-ci ne pointent sur rien.
Deux solutions : tu te compliques avec des malloc et des free pour leur affecter une variable, ou alors tu changes ainsi:
char variable[total][Taille_max_d_une_chaine];
attention, c'est bien char variable et plus char * variable !
Marsh Posté le 06-02-2002 à 13:58:10
char *variable[total];
for(i = 0; i < total; i++)
{
variable[i] = (char *)malloc(Taille_de_la_chaine * sizeof(char));
}
le sizeof(char) c'est facultatif ici, mais est necessaire si tu as un tableau d'int par exemple (sizeof(int))
pour libérer c'est pareil, avec free(variable[i]);
Marsh Posté le 06-02-2002 à 14:37:01
pour mettre une var au milieu , je pense que tu as 2 possibilites:
- soit tu conais la longueur de ta phrase et pour recupere la vaueur tu fais :
char *phrase;
char *variable=malloc(size(char)*MAX);
int lg_deb=strlen( debut de ta phrase )
int lg_fin=strlen( fin de ta phrase )
int lg = longueur totale .// phrase + variable
strcpy(variable,phrase+lg_deb);
variable[lg-lg_deb]='\0';
- soit tu ne la connais pas et tu devra fgaire un truc du style BLAbLA / variable / BLOBLO et utiliser la fonctoin strtok ( mais je me soiuviens plus trop comment elle marche )
resultat =
Marsh Posté le 06-02-2002 à 18:09:46
J'ai voulu improviser pour l'instertion de la chaine ...
Voila comment je m'y prends ... pouvez m'eexpliquer pkoi ça ne marche pas ... ?
le .c:
void read(char *fichier)
{
FILE *fic;
char temp[32];
int i;
fic = fopen("D:\\tables.txt","r" );
if(fic != NULL)
{
i=0;
while(!feof(fic))
{
fscanf(fic, "%s", temp);
tables[i]=malloc(sizeof(temp));
strcpy(tables[i],temp);
i++;
}
fclose(fic);
}
else printf("le fichier %s n'a pas pu etre ouvert",input_f);
FILE *sortie;
int j;
char *cmd;
sortie = fopen("greptables.bat","a" );
if(sortie != NULL)
{
for(j=0;j<i;j++)
{
cmd = insert(tables[j]);
fputs(cmd, sortie);
}
fclose(sortie);
free(tables);
}
}
char *insert(char *table)
{
char *cmd_dbt;
char *cmd_fin;
char *cmd;
char *cmd1;
char *cmd2;
cmd_dbt = "grep -i -l -c ";
cmd_fin = " *.* >> ";
cmd1=(strcat(cmd_dbt,table));
cmd2=(strcat(cmd1,cmd_fin));
cmd=(strcat(cmd2,"resultGrep.txt\n" ));
return(cmd);
}
Comme vous pouvez le voir ( dumoins j'espere ) j'essaye de creer un fichier dans lequel chauqe ligne est une commande ou j'ai inséré une variable ( tables ).
je voudrais obtenir :
grep -i -l -c AAA *.* >> greptables.bat
grep -i -l -c AAB *.* >> greptables.bat
grep -i -l -c AAC *.* >> greptables.bat
grep -i -l -c AAD *.* >> greptables.bat
grep -i -l -c AEG *.* >> greptables.bat
grep -i -l -c AFM *.* >> greptables.bat
sachant que tables.txt est composé de :
AAA
AAB
AAC
AAD
AEG
AFM
Qu'est ce qui ne va pas .... voilà ce que j'obtiens avec le code actuel :
grep -i -l -c AAA *.* >> resultGrep.txt
grep -i -l -c AAA *.* >> resultGrep.txt
AAB *.* >> resultGrep.txt
grep -i -l -c AAA *.* >> resultGrep.txt
AAB *.* >> resultGrep.txt
AAC *.* >> resultGrep.txt
grep -i -l -c AAA *.* >> resultGrep.txt
AAB *.* >> resultGrep.txt
AAC *.* >> resultGrep.txt
AAD *.* >> resultGrep.txt
grep -i -l -c AAA *.* >> resultGrep.txt
AAB *.* >> resultGrep.txt
AAC *.* >> resultGrep.txt
AAD *.* >> resultGrep.txt
AEG *.* >> resultGrep.txt
grep -i -l -c AAA *.* >> resultGrep.txt
AAB *.* >> resultGrep.txt
AAC *.* >> resultGrep.txt
AAD *.* >> resultGrep.txt
AEG *.* >> resultGrep.txt
AFM *.* >> resultGrep.txt
grep -i -l -c AAA *.* >> resultGrep.txt
AAB *.* >> resultGrep.txt
AAC *.* >> resultGrep.txt
AAD *.* >> resultGrep.txt
AEG *.* >> resultGrep.txt
AFM *.* >> resultGrep.txt
AFM *.* >> resultGrep.txt
c un peu long je sais ...
Merci
Marsh Posté le 07-02-2002 à 10:17:41
paranoidandroid a écrit a écrit : Hummmmm ... |
Mais pourquoi ça déconne ça ???
char *insert(char *table)
{
char *cmd_dbt;
char *cmd_fin;
char *cmd;
char *cmd1;
char *cmd2;
cmd_dbt = "grep -i -l -c ";
cmd_fin = " *.* >> ";
cmd1=(strcat(cmd_dbt,table));
cmd2=(strcat(cmd1,cmd_fin));
cmd=(strcat(cmd2,"resultGrep.txt\n" ));
return(cmd);
}
Marsh Posté le 06-02-2002 à 12:48:55
comment faire ça ?
int total=100;
char *variable[total];
char phrase="BLABLA BLA BLOBLO";
for (i=0;i<total;i++)
{
je veux inserer chaque valeur de variable[i] à la phrase ... pour obtenir :
"BLABLA BLA variable[i] BLOBLO"
}
aisni je veux obtenir :
"BLABLA BLA variable[1] BLOBLO"
"BLABLA BLA variable[2] BLOBLO"
"BLABLA BLA variable[3] BLOBLO"
...
"BLABLA BLA variable[100] BLOBLO"
merci ...