GNU Octave: используйте функцию textscan() для чтения последовательности целых чисел, разделенных точкой (.)

Я пытаюсь прочитать данные из файла с датами в формате ДЕНЬ.МЕСЯЦ.ГОД, используя функцию textscan(...). Ниже приведена простая иллюстрация проблемы.

Это не работает так, как хотелось бы:

    u = textscan ('5.2.1975','%d.%d.%d')
    u = 
    {
      [1,1] = 5
      [1,2] = 1975
      [1,3] = 0
    }

Кажется, что textscan обрабатывает часть 5.2 как десятичное число и округляет его до 5. Он возвращает последнее число (1975) как второй элемент u.

Преобразование работает должным образом, если разделитель не является точкой:

    u = textscan ('5*2*1975','%d*%d*%d')
    u = 
    {
      [1,1] = 5
      [1,2] = 2
      [1,3] = 1975
    }

Что мне нужно изменить, чтобы он работал с точкой?


person mbrennwa    schedule 02.03.2018    source источник


Ответы (1)


Вот что я наблюдаю в Octave 4.0.3:

>>  u = textscan ('5.2.1975','%d.%d.%d')
u =
{
  [1,1] = 5
  [1,2] = 2
  [1,3] = 1975
}

Таким образом, кажется, что textscan в принципе делает именно то, что вы ожидаете.

Если вы видите другой результат:

  • в более старой версии Octave вам следует обновить свою версию Octave и проверить еще раз;
  • в недавнем выпуске вы должны сообщить об этом как об ошибке в системе отслеживания ошибок Octave. .
person Julien Bect    schedule 03.03.2018
comment
У меня Октава 4.2. Тогда попробую баг-трекер. - person mbrennwa; 03.03.2018