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 -
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;
}
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:
- Lire le contenue d'un fichier en C++
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire un fichier epub - Guide
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
6 réponses
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.
Bonne continuation.
vous pouvez ajouter ça
pcq suis debutant
merci
pcq suis debutant
merci
En supposant que tu veuilles récupérer dans une nouvelle chaîne 'newChn' la chaîne 'chn' sans les espaces, on pourrait écrire:
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.
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.
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*'
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*'
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.
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.
l'erreur est sur newChn = malloc(strlen(chn+i) + 1);
que faire alors ?
merci
que faire alors ?
merci
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.
Bonne continuation.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ç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);
}
}
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);
}
}
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);
}
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);
}
pcq suis debutant
merci