Récupérer une partie d'un fichier en C++
Résolu/Fermé
A voir également:
- Récupérer une partie d'un fichier en C++
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Ouvrir un fichier .bin - Guide
5 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
20 mai 2009 à 10:02
20 mai 2009 à 10:02
Les balises de code ? Je connais pas, je suis vraiment noob, je veux bien que tu m'expliques...
Quand tu écris ton message, juste au dessus, il y a des balises de mise en forme, G, I, S, <>. <> c'est les balise de code, tu clic dessus et tu met ton code entre.
Les erreurs qu'il me renvoie, c'est
-conversion invalide de void* en FILE* dans le fgets
C'est normale, tu mélange C et C++, ou plus précisément fstream et FILE* qui ne sont pas du tout la meme chose.
-erreur d'initialisation de l'argument 3 dans le fgets
Erreur causée par la précedente
-fichier2 non déclaré (je sais pas comment le déclarer, enfin de quel type ?!)
Tu as bien réussi pour fichier, pourquoi pas pour fichier2 ? pour utiliser fputs, il faut utiliser FILE* fichier2;
Merci d'avance, et désolé si mon code est dur à comprendre, mais je programme mal et du coup je fais en 20 lignes ce qu'on peut certainement faire en 5... lourdeur lourdeur quand tu nous tiens...
Le tout c'est d'avoir le raisonnement le plus logique possible. Pense au plus simple et écrit le.
Quand tu écris ton message, juste au dessus, il y a des balises de mise en forme, G, I, S, <>. <> c'est les balise de code, tu clic dessus et tu met ton code entre.
Les erreurs qu'il me renvoie, c'est
-conversion invalide de void* en FILE* dans le fgets
C'est normale, tu mélange C et C++, ou plus précisément fstream et FILE* qui ne sont pas du tout la meme chose.
-erreur d'initialisation de l'argument 3 dans le fgets
Erreur causée par la précedente
-fichier2 non déclaré (je sais pas comment le déclarer, enfin de quel type ?!)
Tu as bien réussi pour fichier, pourquoi pas pour fichier2 ? pour utiliser fputs, il faut utiliser FILE* fichier2;
Merci d'avance, et désolé si mon code est dur à comprendre, mais je programme mal et du coup je fais en 20 lignes ce qu'on peut certainement faire en 5... lourdeur lourdeur quand tu nous tiens...
Le tout c'est d'avoir le raisonnement le plus logique possible. Pense au plus simple et écrit le.
Re !
J'ai repensé mon code, ça m'a l'air plus clair, et simplifié je le recolle (entre les balises ce coup ci...)
Le problème qui me reste est le suivant :
cannot convert 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'char*' in assignment
Je n'arrive pas écrire dans mon fichier de sortie, car j'ai pas du utiliser la bonne commande d'écriture.
autrement dit, je peux pas écrire une ligne de mon vector dans mon fichier2, mais j'arrive pas
non plus à transformer le vector en char. (il me semble que je peux écrire des char avec la commande .write non ?)
J'ai repensé mon code, ça m'a l'air plus clair, et simplifié je le recolle (entre les balises ce coup ci...)
#include <fstream> #include <vector> #include <iostream> using namespace std; int main() { fstream fichier("Toto.res"); fstream fichier2("Tata.res"); vector <string> monTableau; int debut; int fin; int i; char *chaine; if ( !fichier ) cout << "fichier inexistant"; else { bool continuer = true; while( !fichier.eof() ) { monTableau.push_back("");//creation d'une ligne vide getline(fichier, monTableau.back());//lecture d'une ligne du fichier int ligne = monTableau.size() - 1;//je recupere la taille du tableau (-1 pour la ligne 0) } fin = monTableau.size(); debut = fin-2000; cout << "nombre de lignes : " << monTableau.size() << endl;//j'affiche le nombre de lignes pour test for(i=debut;i<fin;i++) { chaine=monTableau[i]; fichier2.write (chaine,1000); } } return 0; }
Le problème qui me reste est le suivant :
cannot convert 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'char*' in assignment
Je n'arrive pas écrire dans mon fichier de sortie, car j'ai pas du utiliser la bonne commande d'écriture.
autrement dit, je peux pas écrire une ligne de mon vector dans mon fichier2, mais j'arrive pas
non plus à transformer le vector en char. (il me semble que je peux écrire des char avec la commande .write non ?)
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 mai 2009 à 16:48
19 mai 2009 à 16:48
C'est quoi et où l'erreur exactement.
Ton code est difficile à comprendre. Utilise les balises de code.
Ton code est difficile à comprendre. Utilise les balises de code.
Les balises de code ? Je connais pas, je suis vraiment noob, je veux bien que tu m'expliques...
Les erreurs qu'il me renvoie, c'est
-conversion invalide de void* en FILE* dans le fgets
-erreur d'initialisation de l'argument 3 dans le fgets
-fichier2 non déclaré (je sais pas comment le déclarer, enfin de quel type ?!)
Merci d'avance, et désolé si mon code est dur à comprendre, mais je programme mal et du coup je fais en 20 lignes ce qu'on peut certainement faire en 5... lourdeur lourdeur quand tu nous tiens...
Les erreurs qu'il me renvoie, c'est
-conversion invalide de void* en FILE* dans le fgets
-erreur d'initialisation de l'argument 3 dans le fgets
-fichier2 non déclaré (je sais pas comment le déclarer, enfin de quel type ?!)
Merci d'avance, et désolé si mon code est dur à comprendre, mais je programme mal et du coup je fais en 20 lignes ce qu'on peut certainement faire en 5... lourdeur lourdeur quand tu nous tiens...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
25 mai 2009 à 09:03
25 mai 2009 à 09:03
le problème viens de là non ?
alors que chaine est un pointeur. Tu ne peux pas égaler ainsi.
Le plus propre, c'est de déclarer chaine en string et de faire ainsi :
chaine=monTableau[i]; fichier2.write (chaine,1000);C'est là encore normale, il faut faire attention aux type. String c'est une chaîne de caractère, OK, mais c'est surtout une classe !
alors que chaine est un pointeur. Tu ne peux pas égaler ainsi.
Le plus propre, c'est de déclarer chaine en string et de faire ainsi :
string chaine=monTableau[i]; fichier2.write(chaine.c_str(),chaine.size()*sizeof(char));c_str() est une méthode de la classe string qui convertie les classes string en const char*
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
25 mai 2009 à 11:25
25 mai 2009 à 11:25
Toujours regarder la documentation des classes !
https://en.cppreference.com/w/Main_Page
https://en.cppreference.com/w/Main_Page
Utilisateur anonyme
>
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
25 mai 2009 à 11:45
25 mai 2009 à 11:45
Thanks =)