Lire le contenue d'un fichier en C++

matlamis Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
matlamis Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai un petit probème que je n'arrive pas à trouver la solution en C++.
je veux lire un fichier texte et le mettre le contenue dans un variable.
mon fichier texte a comme contenue l'adresse web.

h**p://3w.gohjk.com/lamis.txt

NB: le fichier texte est dans mon recepteur sat qui tourne sous linux enigma1
donc dans un DREAMBOX

j'ai la solution pour la lecture, mais seulement si dans le fichier le texte est audebut.
quand je change la possition du texte il ne marche plus.
pcq dans mon variable j'ai des espace avant mon texte.

comment je peux faire pour supprimer les espaces?
j'ai besoin qu'il marche quelque soit la possition du texte.

voici mon prog en C++

eString url;
char emuactive[100];

FILE *fp = fopen("/var/etc/urlname","r");
if (fp)
{
memset(emuactive, 0, sizeof(emuactive));
fgets(emuactive, 200, fp);
fclose(fp);
int a=0;
for (a=0; a<strlen(emuactive); a++) if (emuactive[a]==(char)0x0a) emuactive[a]=0;

url = emuactive;
}

A voir également:

6 réponses

loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Supprimer des espaces au début d'une chaîne ? Oh ce n'est vraiment pas difficile: il suffit d'écrire une boucle qui va tester le ième caractère (en commençant à 0) de la chaîne de caractères 'chn'. Lorsque le caractère (*chn+i) ne sera plus une espace, alors le résultat sera obtenu par: 'chn+i'.
Bonne continuation.
0
matlamis Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   2
 
bonjour vous pouvez m'aider à mettre le boucle en question
pcq suis debutant

merci
0
matlamis Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   2
 
vous pouvez ajouter ça

pcq suis debutant

merci
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
En supposant que tu veuilles récupérer dans une nouvelle chaîne 'newChn' la chaîne 'chn' sans les espaces, on pourrait écrire:
  char* chn = "    abc";
  char* newChn;
  int i = -1;
  while (*(chn+(++i)) == ' ');
  newChn = malloc(strlen(chn+i) + 1);
  strcpy(newChn, chn+i);
Ce code n'est pas complètement sécurisé mais il doit fonctionner.
NB: Si tu es sous Linux et s'il ne te gênes pas d'écrire du code non ANSI, alors tu peux simplidier en faisant appel à la fonction 'strdup'.
Bonne continuation.
0
matlamis Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   2
 
FILE *fp = fopen("/var/etc/urlname","r");
if (fp)
{
memset(emuactive, 0, sizeof(emuactive));
fgets(emuactive, 200, fp);
fclose(fp);
int a=0;
for (a=0; a<strlen(emuactive); a++) if (emuactive[a]==(char)0x0a) emuactive[a]=0;
char *chn = emuactive;
char *newChn;
int i = -1;
while (*(chn+(++i)) == ' ');
{
newChn = malloc(strlen(chn+i) + 1);
strcpy(newChn, chn+i);
}
url = newChn;


il me donne comme erreur de compilation

error: invalid conversion from 'void*' to 'char*'
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Si l'erreur concerne la ligne newChn = malloc(strlen(chn+i) + 1);, c'est une question, je crois, de définition ISO. Avant, il fallait préciser le cast et maintenant ce n'est plus nécessaire. Comme un 'gars sérieux' traîne dans le coin, il va probablement le préciser.
Par contre, si l'erreur concerne la ligne url = newChn;, comme je ne sais pas ce qu'est le type 'eString', je ne saurais pas répondre.
0
matlamis Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   2
 
l'erreur est sur newChn = malloc(strlen(chn+i) + 1);

que faire alors ?

merci
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Il faut simplement 'caster': newChn = (char*)malloc(strlen(chn+i) + 1;. J'aurais pensé que le compilateur donnerait seulement un warning, mais pas une erreur. Bizarre... tu ne dois pas avoir un compilateur récent ou bien sa configuration est quelque peu insolite; Je n'en dirai pas plus car le compilateur n'est pas ma spécialité.
Bonne continuation.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
matlamis Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   2
 
ça marche, merci
mais j'ai viens de constater que , quand j'écris le texte sur la deuxième ligne , il ne marche plus.
le problème était avant.
vous venaiz de corriger les espace.
comment je peux faire pour qu'il cherche le texte à lire sur toute la page.

NB: Ne touche pas tes lignes, le probleme est avant.
là où je mis des astérix.


if(!inDownloadFlag)
{
eString url;
eString name;
char emuactive[100];
FILE *fp = fopen("/var/etc/urlname","r");
if (fp)
{
memset(emuactive, 0, sizeof(emuactive));
* fgets(emuactive,200, fp);
* int a=0;
* for (a=0; a<strlen(emuactive); a++)
* if (emuactive[a]==(char)0x0a)
* emuactive[a]=0;
char *chn = emuactive;
char *newChn;
int i = -1;
while (*(chn+(++i)) == ' ');
{
newChn = (char *)malloc(strlen(chn+i) + 1);
strcpy(newChn, chn+i);
}
fclose (fp);
url = newChn;
name = " **** Lamis Serveur **** ";
CONNECT(theFetcher.downloadDone, eMyWindow::downloadDone);
downloadDoneFlag = 0;
currentName = name;
theFetcher.fetch(url);
}
else

{
url = "h**p://3w.kololkk.com/info.php";
name = " **** Lamis Serveur **** ";
CONNECT(theFetcher.downloadDone, eMyWindow::downloadDone);
downloadDoneFlag = 0;
currentName = name;
theFetcher.fetch(url);

}

}
0
matlamis Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   2
 
Voici la solution.

eString url;
eString name;
char chn[256];
char *newChn;
int i = -1 ;
int a = 0;
FILE *fp = fopen("/var/etc/urlname","r");
if (fp)
{
memset(chn, 0, sizeof(chn));
while(fgetc(fp)!=EOF)
{
fgets(chn,256, fp);
}
for (a=0; a<strlen(chn); a++)
if (chn[a]==(char)0x0a)
chn[a]=0;
while (*(chn+(++i)) == ' ');
newChn = (char *)malloc(strlen(chn+i) + 1);
strcpy(newChn, chn+i);
fclose (fp);
url = newChn;
name = " **** Lamis Serveur **** ";
CONNECT(theFetcher.downloadDone, eMyWindow::downloadDone);
downloadDoneFlag = 0;
currentName = name;
theFetcher.fetch(url);
}
else

{
url = "h**p://3w.kololkk.com/info.php";
name = " **** Lamis Serveur **** ";
CONNECT(theFetcher.downloadDone, eMyWindow::downloadDone);
downloadDoneFlag = 0;
currentName = name;
theFetcher.fetch(url);

}
0