Octave - fskipl: неверный номер потока - PullRequest
0 голосов
/ 14 сентября 2018

Я получил сообщение об ошибке: «Неверный список параметров» из моей функции, который позволяет Octave открыть текстовый файл и прочитать его, чтобы получить входные данные для моей работы.

function [machNumbers]=readsrm(testfile.txt) 
  fid = fopen('testfile.txt','w');
  fskipl(fid, 3);

  # read number of machnumber
  numMachNumber = fscanf(fid, "%i", 1)
  fscanf(fid, "%s", 5);
  machNumbers = fscanf(fid, "%f", numMachNumber);

  fclose(fid);
endfunction

РЕДАКТИРОВАТЬ:

Я обновил свой код и теперь у меня появляется эта ошибка: «ошибка: fskipl: неверный номер потока = -1».

Мой код выглядит так:

function [machNumbers, weights, altitudes, specificRanges]=readsrm(myfilename)
myfilename = "filename"

  fid = fopen(myfilename,'r');
  fskipl(fid, 3);

fclose(fid);
endfunction

РЕДАКТИРОВАТЬ:

Проблемы выше, решены, спасибо.:) Проблема в том, что мой цикл for работает неправильно.С этим кодом я не получаю никаких параметров из моего текстового файла.

Вот код:

function [machNumbers, weights, altitudes, specificRanges]=readsrm(myfilename)
myfilename = "testfile.txt"

  fid = fopen(myfilename,'r');
  fskipl(fid, 3);

  # read number of machnumber
  numMachNumber = fscanf(fid, "%i", 1)
  fscanf(fid, "%s", 5);
  machNumbers = fscanf(fid, "%f", numMachNumber);

  # read weights
  numWeights = fscanf(fid, "%i", 1);
  fscanf(fid, "%s", 5);
  weights = fscanf(fid, "%f", numWeights)

  # rad altitudes 
  numFl = fscanf(fid, "%i", 1)
  fscanf(fid, "%s", 5);
  altitudes = fscanf(fid, "%f", numFl)

  irrelevantValues = fscanf(fid, "%s", 7)
  for flightLevel= 1:numFl
    for weight = 1:numWeights
      specificRanges(flightLevel, weight, 1:numMachNumber) = fscanf(fid, "%f", numMachNumber);
    endfor
  endfor
  fclose(fid);
endfunction

1 Ответ

0 голосов
/ 14 сентября 2018
function [machNumbers]=readsrm(testfile.txt) 

не является допустимым объявлением функции. Вы хотите дать правильное имя переменной, например

function [machNumbers]=readsrm(myfilename)
  fid = fopen(myfilename,'r');
  ...

и затем вызовите вашу функцию как

machNumbers = readsrm("testfile.txt");

и, конечно, вы, очевидно, хотите читать из fid, поэтому вам нужно fopen файл с "r" (доступ для чтения), а не с "w" (доступ для записи)

...