2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Игнорирование при считывании из потока
Сообщение03.05.2016, 12:12 
Аватара пользователя


20/06/14
236
Здравствуйте, я импортирую последний столбец из матрицы известной размерности $n \times (n + 1)$, заданной в файле.
Код:
1   4   6   4
7   3   5   7
7   2   4   5

Используется синтаксис C++
ifstream file(пусть_к_файлу);
int n = 3;
vector<double> col(n);
for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++) file.ignore();
        file >> col[i];
}

Т.е. идейно я игнорирую все символы, кроме последнего, который записываю в вектор, однако данный код не приводит к получению нужного вектора-столбца $ (4, 7, 5)$, вместо этого получаю $(4, 6, 4)$. Спасибо

 Профиль  
                  
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 12:25 
Заслуженный участник


09/05/12
25179
file.ignore() выкидывает один символ из входного потока. Поэтому сначала Вы выкидываете единицу и два пробела, а потом - каждый раз по три пробела, удачно расположенные между цифрами в верхней строке.

 Профиль  
                  
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 12:40 
Аватара пользователя


20/06/14
236
Pphantom, это я знаю, более явно вопрос выглядит так: какие аргументы передать ignore, чтобы всё работало (ещё более явно: чтобы игнорировались первые $k$ непробельных символов).

 Профиль  
                  
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 13:09 


11/12/14
893
Да просто считывайте в переменную, которую потом не будете использовать и всё.

 Профиль  
                  
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 13:38 
Заслуженный участник


09/05/12
25179
Qazed в сообщении #1120424 писал(а):
Pphantom, это я знаю, более явно вопрос выглядит так: какие аргументы передать ignore, чтобы всё работало (ещё более явно: чтобы игнорировались первые $k$ непробельных символов).
Именно непробельных не получится, но можно игнорировать просто $k$ символов (указав это число в качестве аргумента). Но вообще-то при такой структуре файла проще воспользоваться советом aa_dav.

 Профиль  
                  
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 14:07 
Заслуженный участник


27/04/09
28128
Я чего-то не понимаю, или различные библиотеки для конструирования парсеров из блоков ещё недостаточно распространены для популярных языков? Можно было бы явно описать формат файла и, более того, получать на выходе сразу что нужно. Освоить их обычно нетрудно тоже.

 Профиль  
                  
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 16:23 
Аватара пользователя


20/06/14
236
aa_dav, спасибо. Хотелось без костылей, но, видимо, не получится
Pphantom, спасибо. Всё к этому идёт
arseniiv, это учебная задача, при использовании подобных библиотек решение не засчитывается

 Профиль  
                  
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 16:24 
Заслуженный участник


27/04/09
28128
А, тогда простите. (Подозревал.)

 Профиль  
                  
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 16:39 
Заслуженный участник


11/05/08
32166
А зачем вообще такая странно жёсткая конструкция? Естественный подход -- во внутреннем цикле организовать подцикл, который считывает по символу до тех пор, пока это не окажется цифра.

 Профиль  
                  
 
 Re: Игнорирование при считывании из потока
Сообщение04.05.2016, 09:55 
Аватара пользователя


20/06/14
236
ewert, я обманул когда показал файл из которого считываю. В настоящем не цифры, а десятичные дроби, выровненные точка в точку пробелами.
Код:
  34.52     6.6245   0.42
   7.763   53.56    90.0
В начале пробелов нет, но форум игнорирует один в начале строки — пришлось и его обманывать, добавлять по 2 в начале.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group