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

Неправильное считывание данных - C++

Восстановить пароль Регистрация
 
Izaron
7 / 6 / 1
Регистрация: 29.12.2012
Сообщений: 41
26.06.2013, 17:11     Неправильное считывание данных #1
Всем привет. Писал программу для считывания данных и запоролся на одном месте.

В общем, проблема такова - в файле встречаются строки, начинающиеся на f, как то:
f 710/1714/442 713/1718/444 717/1717/447
f 722/337/452 726/344/456 724/335/454
f 722/337/452 728/343/457 726/344/456
f 722/337/452 730/342/459 728/343/457
Вот код считывания:

C++
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
ifstream fin;
char input, input2;
//.....
fin.open(filename);
 
if(fin.fail() == true)
        return false;
 
fin.get(input);
while(!fin.eof())
{
//.......
        if(input == 'f') 
        {
            fin.get(input);
            if(input == ' ')
            {
                    fin >> faces[faceIndex].vIndex3 >> input2 >> faces[faceIndex].tIndex3 >> input2 >> faces[faceIndex].nIndex3
                        >> faces[faceIndex].vIndex2 >> input2 >> faces[faceIndex].tIndex2 >> input2 >> faces[faceIndex].nIndex2
                        >> faces[faceIndex].vIndex1 >> input2 >> faces[faceIndex].tIndex1 >> input2 >> faces[faceIndex].nIndex1;
 
                faceIndex++;
            }
        }
 
        while(input != '\n')
            fin.get(input);
 
        fin.get(input);
}
 
fin.close();
Проблема в том, что строки, начинающиеся на f, не всегда содержат по 9 цифр, разделенных пробелами и /. Такая строка может выглядеть так:
f 710//442 713//444 717//447
f 722//452 726//456 724//454
Без проблем - код:
C++
1
2
3
fin >> faces[faceIndex].vIndex3 >> input2 >> input2 >> faces[faceIndex].nIndex3
>> faces[faceIndex].vIndex2 >> input2 >> input2 >> faces[faceIndex].nIndex2
>> faces[faceIndex].vIndex1 >> input2 >> input2 >> faces[faceIndex].nIndex1;
Отлично работает.

Но в файле может быть и тот и другой вид строки. Как их совместить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2013, 17:11     Неправильное считывание данных
Посмотрите здесь:

Считывание данных C++
Считывание данных C++
считывание данных из файла C++
Считывание данных из файла C++
считывание данных из файла в C++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dr_Quake
Заблокирован
26.06.2013, 17:16     Неправильное считывание данных #2
Проверять строку на // сначала. К.О.
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
26.06.2013, 17:18     Неправильное считывание данных #3
как варик, прочитать строку до знака \n а потом распарсить её по разделителям самостоятельно

не кошер так делать
C++
1
fin.fail() == true
просто
C++
1
if(fin.fail())
if сработает если условие истинно, зачем тебе производить дополнительное сравнение истины и истиной
Izaron
7 / 6 / 1
Регистрация: 29.12.2012
Сообщений: 41
26.06.2013, 18:01  [ТС]     Неправильное считывание данных #4
Цитата Сообщение от Dr_Quake Посмотреть сообщение
Проверять строку на // сначала. К.О.
Думаешь, я так не делал?
fin.get(input2) не работает, так как если не было просчитано 2 символа '/' подряд, то не знаю функцию, которая возвращается на символ назад и считывает число по-нормальному.

Если не поняли: 1. Считываю символ 'f'. 2. Считываю первое число. 3. Считываю символ '/'. 4. Считываю следующий символ. Если этот символ '/', то записываю данные как следует. А если это какая-то цифра, то хз, как вернуться на символ назад.

Буду использовать следующий вариант: если встречаются двойной '/', то делается пометка в массиве из булевых значений. После этого файл еще раз проверяется и считывается уже в зависимости от предыдущей проверки, используя это массив.
Всем спасибо
Dr_Quake
Заблокирован
26.06.2013, 18:04     Неправильное считывание данных #5
А зачем возвращаться???

Добавлено через 38 секунд
Считываешь / , если следующий / - то результат 0, иначе начинаем парзинг числа. Кстати regex вернёт верные аргументы сразу, если строка "" - то 0.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.06.2013, 16:16     Неправильное считывание данных #6
Читать посимвольно, проверять цифра или нет и если цифра, то помещать в буфер. Если считалась не цифра, то в буфере число, обрабатывать считанное (строку в число), помещать куда надо.
Yandex
Объявления
27.06.2013, 16:16     Неправильное считывание данных
Ответ Создать тему
Опции темы

Текущее время: 21:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru