2014 dxdy logo

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

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




 
 Игнорирование при считывании из потока
Сообщение03.05.2016, 12:12 
Аватара пользователя
Здравствуйте, я импортирую последний столбец из матрицы известной размерности $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 
file.ignore() выкидывает один символ из входного потока. Поэтому сначала Вы выкидываете единицу и два пробела, а потом - каждый раз по три пробела, удачно расположенные между цифрами в верхней строке.

 
 
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 12:40 
Аватара пользователя
Pphantom, это я знаю, более явно вопрос выглядит так: какие аргументы передать ignore, чтобы всё работало (ещё более явно: чтобы игнорировались первые $k$ непробельных символов).

 
 
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 13:09 
Да просто считывайте в переменную, которую потом не будете использовать и всё.

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

 
 
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 14:07 
Я чего-то не понимаю, или различные библиотеки для конструирования парсеров из блоков ещё недостаточно распространены для популярных языков? Можно было бы явно описать формат файла и, более того, получать на выходе сразу что нужно. Освоить их обычно нетрудно тоже.

 
 
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 16:23 
Аватара пользователя
aa_dav, спасибо. Хотелось без костылей, но, видимо, не получится
Pphantom, спасибо. Всё к этому идёт
arseniiv, это учебная задача, при использовании подобных библиотек решение не засчитывается

 
 
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 16:24 
А, тогда простите. (Подозревал.)

 
 
 
 Re: Игнорирование при считывании из потока
Сообщение03.05.2016, 16:39 
А зачем вообще такая странно жёсткая конструкция? Естественный подход -- во внутреннем цикле организовать подцикл, который считывает по символу до тех пор, пока это не окажется цифра.

 
 
 
 Re: Игнорирование при считывании из потока
Сообщение04.05.2016, 09:55 
Аватара пользователя
ewert, я обманул когда показал файл из которого считываю. В настоящем не цифры, а десятичные дроби, выровненные точка в точку пробелами.
Код:
  34.52     6.6245   0.42
   7.763   53.56    90.0
В начале пробелов нет, но форум игнорирует один в начале строки — пришлось и его обманывать, добавлять по 2 в начале.

 
 
 [ Сообщений: 10 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group