2015-11-05 6 views
0

Я пишу небольшую программу, чтобы просто получить строки из файла srt в определенном формате. Однако я получаю значение мусора в самом первом (и только том) чтении, которое я использую с помощью getline. Может кто-нибудь указать, почему я получаю это ненормальное поведение?Значение мусора при чтении из файла с использованием getline

//Small program to get the text from the srt files. 

#include<iostream> 
#include<string> 
#include<fstream> 
#include<algorithm> 
#include<vector> 
#include<sstream> 
#include<conio.h> 

using namespace std; 

void srtToTranscript(ifstream* iFile, ofstream *oFile); 

int main(){ 
std::string file_name; 
std::string transcript; 

cout << "Enter srt file name (without extension)"; 
cin >> file_name; 

ifstream iFile; 
ofstream oFile; 

iFile.clear(); 

iFile.open("data\\" + file_name+".srt"); 
oFile.open("data\\" + file_name + "_result.txt"); 
srtToTranscript(&iFile,&oFile); 
cout << "Conversion done. Check in the same folder"; 
cout << "Press a key to exit... "; 
while (!_kbhit()); 
char dummy = _getch(); 
return 0; 
} 

void srtToTranscript(ifstream* iFile, ofstream* oFile) 
{ 
     int i = 1; 
     std:string line; 
     for (; getline(*iFile, line);) 
     { 
      cout << line << endl; 
      cout << to_string(i) << endl; 

      if (line.compare(to_string(i)) == 0){ 
       getline(*iFile, line); 
       i++; 
       continue; 
      } 

      *oFile << line + ",\n"; 
     } 
     oFile->close(); 
} 

прилагается образец файла я читаю от:

00: 00: 00000 -> 00: 00: 12000

Переводчик: Чт -Huong Ha

00: 0 0: 12038 -> 00: 00: 15.012

За последние два десятилетия, Индия стала

+0

В качестве примечания: Почему вы проходя аргументы 'srtToTranscript' как указатели? Что делать, если кто-то передает нулевой указатель? – emlai

+0

Я просто что-то пробовал. Не рассматривайте это как код уровня продукции. Вы думаете, что это проблемы, вызывающие проблему? – TheBlueNotebook

+0

Какой вывод записывается в 'cout', и какой результат вы ожидаете? –

ответ

0

Проблема ваша ifile не открывается успешно.

Я вижу #include <conio.h> в вашем списке включения, поэтому я предполагаю, что вы работаете в Visual Studio? Если вы используете структуру каталогов по умолчанию при настройке Visual Studio, скажите, что у вас есть проект с именем «Foo». Ваш файл .srt должен быть здесь:

.../Documents/Visual Studio 20 ##/Проекты/Foo/Foo/данные/Foo.srt

Когда я правильно поместил туда файл и в командной строке я вошел:

Foo

Я получил этот вывод в: ".../Documents/Visual Studio 20 ##/Проекты/Foo/Foo/данные/Foo_result.txt":

00: 00: 00000 -> 00:00 : 12000,
,
Переводчик: чт-Хуонг Ха,
,
00: 00: 12038 -> 00: 00: 15012,
,
за последние два десятилетия, Индия стала,

Одна вещь, я бы удостоверился из что ваша line декларация в srtToTranscript определяется:

string line 

Не:

std:string line 
+0

Проблема решена путем сохранения моего файла без знака спецификации, как указал JoachimPileborg в комментариях. T \ – TheBlueNotebook

Смежные вопросы