Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Функция getline считывает несколько строк из файла, игнорируя символ новой строки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Error C4430: отсутствует спецификатор типа - предполагается int http://www.cyberforum.ru/cpp-beginners/thread678631.html
ребят только начал осваивать азы на C++, и при свое первой программе натыкнулся на такое... Вот собственно мой код #include <stdio.h> main() { int a, b, c; scanf(" %d %d", &a, &b);...
C++ Перевод из фарлонгов в ярды Парни, вот программа: #include <iostream> using namespace std; int yardix(int); int main () { int farl; cout<<"Vvedite Farlongu: "; cin>>farl; int yard=yardix(farl); http://www.cyberforum.ru/cpp-beginners/thread678618.html
C++ Найти элементы матрицы С как полсумы соответствующих элементов матриц А и В
задача: Дано матрицы А и В размером 6х6 каждая. Найти элементы матрицы С как полсумы соответствующих элементов матриц А и В. как это полсумы? только это не понятно
C++ Найти в строке количество введенных символов распологающихся между а и b
помогите пожалуйста только начал изучать))не могу полностью понять всего))
C++ Нужно сделать, чтобы программа состояла из 3 функций, тоесть 1-ая функция ввода массива, 2-ая основная функция, 3-я- вывод массива http://www.cyberforum.ru/cpp-beginners/thread678587.html
Есть программа #include <iostream> #include <algorithm> const int N = 5; int handSet(void) { int a; std::cout << "Введите число: ";
C++ Программа о принадлежности точки выпуклому многоугольнику Всем привет! Кому не трудно, объясните пожалуйста следующую программу- принадлежит ли точка заданному выпуклому многоугольнику. Очень надо понять ее от начала и до конца(((: #include <iostream>... подробнее

Показать сообщение отдельно
Excogit8er
2 / 2 / 0
Регистрация: 23.10.2012
Сообщений: 66

Функция getline считывает несколько строк из файла, игнорируя символ новой строки - C++

23.10.2012, 18:28. Просмотров 2482. Ответов 8
Метки (Все метки)

Всем доброго дня!

В С++ я новичок, сам себе придумываю задачки, просто для тренировки. Столкнулся с непонятным для меня поведением функции getline, не могу разобраться, в чем может быть косяк? Собственно, задачка совсем простенькая: хотел взять файл субтитров (текстовый, расширение .srt) и выкинуть оттуда все лишнее, сконвертировав в чистый текст.
Ну т.е. из такого вот:

1
00:00:00,122 --> 00:00:00,893
Subtitles: swsub.com

2
00:00:00,000 --> 00:00:01,719
<i>Previously on</i>

3
00:00:02,003 --> 00:00:04,055
I was working on my piece...


Получить просто строки текста:
"<i>Previously on</i> I was working on my piece...

Ну и так далее. Решил использовать getline, вот как-то так:
C++
1
2
3
4
5
6
7
8
9
10
    while (inFile.good())   // считываем до EOF
    {
    inFile.getline (sublines, LINE);
     if ((sublines[13] == '-') && (sublines[14] == '-') && (sublines[15] == '>'))
                        continue;               
    else if ((sublines[0] == '\0') || (sublines[1] == '\0') || (sublines[2] == '\0') || (sublines[3] == '\0'))
                        continue;
    else
    {код, форматирующий текст, с ним все ок  }                                                                                  
    }
Т.е. текст построчно считывается в массив, проверяется на наличие "-->", эта строка (тайминги) отбрасывается, затем отбрасываются пустые строки, либо те, в которых только 3 символа, а текст форматируется - убираются пробелы и ещё пару мелких "косметических" операций. И все бы хорошо, но почему-то getline считывает не всегда по 1 строке, а в некоторых случаях сразу несколько и, соответственно, отбрасывается всякая "мелочь" из 1-2 слов в строке. Поэтому после такой "конвертации" некоторые строки, состоящие из 1-2 коротких слов, выкидываются. Проверял - происходит это только со строками, которые состоят из 1-2 слов, где-то около 10 символов, несмотря на то, что все строки заканчиваются символом '\n', т.е. по идее все же должно быть построчное считывание. Если в первом "if"
C++
1
if ((sublines[13] == '-') && (sublines[14] == '-') && (sublines[15] == '>'))
вместо continue пишу inFile << "имя массива"; то выводится все, но при этом, само собой и строка таймингов (00:00:00,000 --> 00:00:01,719) не отбрасывается.
В чем фишка, не могу понять. Пробовал писать inFile.getline (sublines, LINE, '\n'); явно указывая символ конца строки - то же самое, на некоторых итерациях записывает в массив лишние строки, т.е. сначала идет строка с таймингами, а следом за ней в тот же массив дописывается пустые строки, или строки, состоящие из малого количества символов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru