IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Debut parseur fichier srt - pbm ifstream


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Debut parseur fichier srt - pbm ifstream
    Bonjour a la communauté. Suite a un petit probleme de decalage dans un fichier de sous titrages je me rendu compte qu'aucun logiciel ne permettait de decaler les sous titres (passer Toctoctoc a la place de blablabla dans l'exemple).
    Tout d'abord voici comment se présente les fichiers srt

    1
    00:01:26,461 --> 00:01:27,713
    blablabla

    2
    00:01:27,796 --> 00:01:29,756
    Toctoctoc

    3
    00:01:29,840 --> 00:01:31,216
    Meuhmeuh
    Voila ce que j'ai commencé a faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #include <string>
    #include <fstream>
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    using namespace std;
     
    namespace
    {
    	int get_sub_pos(ifstream fic, string num_sub)
    	{
    		string fic_str;
    		getline(fic,fic_str);
    		while(num_sub.compare(fic_str) != 0)
    			getline(fic,fic_str);
     
    		return fic.tellg();
    	} //get_sub_pos()
    }
     
    int main()
    {
    	ifstream fic_time("/home/ymir/Bureau/script_dev/time.srt");
    	string str_fic_time;
     
    	get_sub_pos(fic_time,"40");
    	getline(fic_time, str_fic_time);
    	getline(fic_time, str_fic_time);
    	cout << "test : " << str_fic_time << endl;
     
    	//translate_srt();
    	return 0;
    } //main()
    ./script_dev/duplicate_srt.c: In function ‘int main()’:
    ./script_dev/duplicate_srt.c:89: note: synthesized method ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)’ first required here
    ./script_dev/duplicate_srt.c:89: error: initializing argument 1 of ‘void<unnamed>::get_sub_pos(std::ifstream, std::string)’
    Voila pour les erreurs de compils, je ne comprends pas trop ma betise meme en cherchant sur cplusplus.com j'ai pas trouvé grand chose.

    En gros ce que je souhaite faire avec cette fonction ca serait pouvoir me positionner sur un numero de sous titres precis.
    A terme je pourrais faire une classe, ca serait plus pratique.

    Merci d'avance,
    Golkran

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Les flux ne sont pas copiables : int get_sub_pos(ifstream &fic, string num_sub).

    Question subsidiaire : que se passe-t-il dans ta fonction si on atteint la fin du fichier sans avoir trouver la ligne demandée ?

    P.S. :
    using namespace std; : ça use les doigts d'écrire std:: ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <stdio.h>
    #include <stdlib.h>
    sont inutiles. Et en tout état de cause, on préfère leur version C++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <cstdio>
    #include <cstdlib>

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton aide je suis vraiment rouillé.
    Desormais je me retrouve coincé une nouvelle fois apres 30min d'acharnement.
    Je n'arrive pas a comparer 2 chaines de caracteres equivalentes
    J'ai fait un cout de test sur size() pour recuperer la size des 2 str (que je veux comparer).
    Celui que je passe en parametre fait 2 alors que celui du fichier fait 3.
    Normal vous me direz a cause du retour chariot dans le fichier.
    J'ai verifié par ex pour 1 DANS LE FICHIER le str c'est bien : 1\n\0 quand je lerecup avec getline.
    Or quand je le compare a "1\n" avec la fonction compare et je ne trouve pas la mm chose, enfin ca ne me renvoye pas 0. Ca me renvoye -1.
    J'y perd mon latin la.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    "\n" n'est pas mis dans la chaîne avec std::getline.
    Ceci dit, si c'est toujours un entier qui précède ton timestamp, alors autant utiliser cette information :
    int get_sub_pos(ifstream &fic, string num_sub).
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
    getline(fic,fic_str);
    istringstream oss(fic_str);
    oss>>num_read; // int num_read
    }

Discussions similaires

  1. Réponses: 18
    Dernier message: 08/08/2005, 20h52
  2. Cherche parseur fichier robots.txt
    Par bluecurve dans le forum Langage
    Réponses: 9
    Dernier message: 12/07/2005, 07h28
  3. [DEBUTANT]Le fichier spécifié est introuvable
    Par Battosaiii dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/04/2005, 16h36
  4. [langage] Ajout en debut de fichier
    Par WetzlarMan dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2004, 11h01
  5. [debutant???] Parseur & portabilté
    Par miloux32 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 24/07/2003, 13h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo