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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Tilk
0 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 79
#1

Парсинг файла игнорирует числа - C++

11.03.2012, 18:31. Просмотров 1304. Ответов 21
Метки нет (Все метки)

Всем добрый день. Пытаюсь прочитать данные из файла 3D модели в формате OBJ.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool L_ObjData::LoadFromFile(string FileName)
{
   ifstream ifs(FileName.c_str());
   if (!ifs)
   {
      return false;
   }
 
   bool check = true;
 
   while(check == true)
   {
      check = ProcessLine(ifs);
   }
   ifs.close();
   return true;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool L_ObjData::ProcessLine(istream& is)
{
   string element_id;
   float x, y, z;   
 
   is >> ws;
 
   if (!(is >> element_id))
   {
      return false;
   }
   // Дальше проверка строки
Дебажу element_id, он по одному слову из файла берет, но когда доходит до чисел - они просто игнорируются.

Вот мой тестовый файл
Код
# Blender v2.56 (sub 0) OBJ File: 'cube.blend'
# www.blender.org
mtllib cube.mtl
o Cube
v 0.984421 -0.936853 -1.021311
v 0.984421 -0.936853 0.978689
v -1.015579 -0.936853 0.978689
v -1.015578 -0.936853 -1.021311
v 0.984422 1.063147 -1.021311
v 0.984421 1.063147 0.978690
v -1.015579 1.063147 0.978689
v -1.015579 1.063147 -1.021311
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
usemtl Material_matrix.jpg
s off
f 1/1 2/2 3/3 4/4
f 5/1 8/2 7/3 6/4
f 1/1 5/2 6/3 2/4
f 2/1 6/2 7/3 3/4
f 3/1 7/2 8/3 4/4
f 5/1 1/2 4/3 8/4
После того как в element_id вижу в дебаге "o" и "Cube", потом только "v" и "vt", числа пропускаются. Подскажите пожалуйста как по целой строчке записывать в строку, чтобы ее потом нарезать на куски? Или как еще это можно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 18:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Парсинг файла игнорирует числа (C++):

VS 2015 игнорирует функции из заголовочного файла - C++
Всем привет :) Заморочился соединить OpenGL с Windows Form по исходникам 2006 года, в результате в проекте куча файлов и возникла...

Парсинг файла - C++
Вот открываю через FILE*, файл ввида "test" { "test1" "test1_1" "test2" "test2_1" "test3" "test3_1" ...

Парсинг файла - C++
Загружаю файл в string, строка в файле только одна, так что масив ненужен. В чем задача стоит? Содержимое файла такое: {"параметр_1":...

Парсинг файла .cnf - C++
Доброго времени суток, уважаемые форумчане. Помогите, пожалуйста, конкретным кодом к вот такой подзадаче: нужно прочитать .cnf файл -...

Парсинг строк из файла - C++
Имеется файл с содержанием 3 Text Text2 Text3

Парсинг и валидация записи числа - C++
Дана запись числа: , требуется выполнить её валидацию и вернуть double в значении функции и код ошибки через параметр. Как нибудь я это...

21
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
13.03.2012, 20:29 #16
файл в правильной кодировке? line endings какие? виндовые?
0
Tilk
0 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 79
13.03.2012, 20:31  [ТС] #17
Не уверен, вот файл
0
Вложения
Тип файла: zip cube.zip (365 байт, 6 просмотров)
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
13.03.2012, 20:32 #18
ну проверь сам как-нибудь
0
Tilk
0 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 79
13.03.2012, 20:38  [ТС] #19
Ну... метод SkipLine перебрасывает на следующую строчку по условию while(next != '\n'). Значит символ '/n' распознается. Выходит с эндингами и кодировкой все хорошо?
0
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
13.03.2012, 20:48 #20
тебе виднее, я не знаю откуда у тебя этот файл
0
Tilk
0 / 0 / 0
Регистрация: 13.03.2010
Сообщений: 79
13.03.2012, 21:11  [ТС] #21
Проблема решена. Вот так работает, остается только строку нарезать ручками.
C++
1
2
char s[256];
fin.getline(s, 256);
Но вопрос про оператор >> открыт. Если кто-нибудь знает, почему он здесь не работает - напишите пожалуйста, буду очень признателен.
0
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
14.03.2012, 17:59 #22
C++
1
2
3
4
5
6
7
8
ifstream f("cube.obj");
string s;
float x, y, z;
f >> s;
if(s == "v")
{
    f >> x >> y >> z;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2012, 17:59
Привет! Вот еще темы с ответами:

typdef struct + парсинг из файла - C++
Собственно такая задача : Надо создать структуру, на основе чтения из файла. От вас готового когда не прошу, если можно - просты ссылки...

Парсинг текстового файла в map - C++
Здравствуйте! Подскажите, пожалуйста, как парсить текстовый файл в map. Например, есть файл, в котором записано следующее: 1 a 2 b 3...

Парсинг из файла и суммирование столбца - C++
В файле "data.txt" записаны 2 столбца чисел. Написать функцию, которая находит сумму чисеол во 2 столбце. (столбцы разделены ' ') Заранее...

Парсинг файлов, найти целые числа - C++
добрый день, требуется следующее: есть файл list.txt его содержимое каждая строчка содержит путь к файлу например D:\file1.txt...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Yandex
Объявления
14.03.2012, 17:59
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru