поиск всех видимых символов в txtfile в MATLAB (и проверка на отсутствие файла) - PullRequest
1 голос
/ 10 апреля 2019

Я совсем новичок в MATLAB. Я должен написать функцию, которая подсчитывает количество определенного символа в текстовом файле. Запрашиваются 2 входных аргумента: fname (вектор символа имени файла) и символ (символ, который он считает в файле).

Выходной аргумент: количество найденных символов. Если файл не найден или символ не является допустимым символом, функция возвращает -1.

Я написал функцию, которая правильно прошла два из 4 тестов. Два неправильных:

==> 1) Тест со всеми видимыми символами

Объяснение: Переменная charnum имеет неверное значение. При тестировании с '#' ваше решение вернуло -1, что неверно. (0)

==> 2) Несуществующий файл

Для номера 2) объяснение не приводится.

Это мой код:

function charnum = char_counter(fname, character)
A = fileread(fname);
char_1 = strfind(A, character);
charnum = numel(char_1);
if isfile(fname) == 0 %doesn't work... 
    charnum = -1;
elseif exist(fname) == 0
    charnum = -1;
elseif charnum == 0
    charnum = -1;
elseif ischar(character) == 0
    charnum = -1;
fclose(fid);
end

Спасибо всем за ваши предложения и советы.

Я понимаю, для 1), что я, вероятно, должен добавить инструкцию, чтобы учесть все символы, но я не могу найти удовлетворительный способ, который работает. Потому что, когда я проверяю символ «#», он работает правильно на моем MATLAB: Когда я проверяю функцию с видимым символом «#», ответ правильный.

Для 2) Я не понимаю, почему моя 4-я строка не работает правильно. Я уже проверял различные варианты, найденные в Интернете, но пока проблема не устранена.

1 Ответ

0 голосов
/ 10 апреля 2019

Чтобы ответить на ваши вопросы:

1) A = fileread(fname) выдаст ошибку, прежде чем вы сможете перейти к операторам if, поэтому вам придется реструктурировать свой код, чтобы учесть это.

Однако вы можете использовать функцию isequal, чтобы сравнить две вещи для оператора if.isfile возвращает 0, если файл не найден, поэтому вы можете сравнить его с 0.

if isequal(isfile(fname),0)
    charnum = -1;

2) Функция ischar возвращает0, если ввод не символьный массив. Это вернет 0 для строковых массивов , поэтому убедитесь, что ваш ввод на 100% является массивом символов.Для этого используйте char:

elseif isequal(ischar(char(character)),0)
    charnum = -1;

Вот как может выглядеть ваша функция:

function charnum = char_counter(fname, character)
    if isequal(isfile(fname),0)
        charnum = -1;
    else    
        A = fileread(fname);
        char_1 = strfind(A, character);
        charnum = numel(char_1);
        if isequal(exist(fname),0)
            charnum = -1;
        elseif isequal(charnum,0)
            charnum = -1;
        elseif isequal(ischar(char(character)),0)
            charnum = -1;
        end
        fclose(fid);
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...