[C]Insérer la valeur d'une variable au milieu d'une chaine de caracter

Insérer la valeur d'une variable au milieu d'une chaine de caracter [C] - Programmation

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 ...

Reply

Marsh Posté le 06-02-2002 à 12:48:55   

Reply

Marsh Posté le 06-02-2002 à 13:08:04    

variable[i] c une phrase ??
et puis ca:

Code :
  1. char phrase="BLABLA BLA BLOBLO";

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...


---------------
What butter and whiskey won't cure, there is no cure for.
Reply

Marsh Posté le 06-02-2002 à 13:21:53    

Code :
  1. char variable[total];  /* c'est ça non au lieu de char * variable[total] ???
  2.     char resultat[100];
  3.     (...)
  4.     sprintf(resultat, "%s%c%s", "BLABLABLA BLA ", variable[i], " BLOBLOBLO" );


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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]

Reply

Marsh Posté le 06-02-2002 à 13:31:39    

ben regarde la liste de parametres de fscanf ...
t'as tout inversé !


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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]);

Reply

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 !


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 06-02-2002 à 13:50:48    

Un exemple de l'utilisation de malloc ?

Reply

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]);


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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 =


---------------

Reply

Marsh Posté le 06-02-2002 à 14:37:01   

Reply

Marsh Posté le 06-02-2002 à 16:26:02    

Merci de votre aide ;)

Reply

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

Reply

Marsh Posté le 06-02-2002 à 20:20:28    

Hummmmm  ...

Reply

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);
}

Reply

Marsh Posté le 07-02-2002 à 12:01:42    

please...

Reply

Sujets relatifs:

Leave a Replay

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