Ошибка CD - путь к файлу не символьный вектор Matlab - PullRequest
0 голосов
/ 19 ноября 2018

Это, вероятно, и простой вопрос Matlab, но я действительно борюсь с этим:

Я строю цикл for, чтобы пройти через каталог папок и открыть файл (filename.csv) внутри каждого уникальноименованная папка.Таким образом, я определил свой filepath в своем цикле, чтобы он открывал каждую правильную папку, а затем правильный файл внутри.Однако я зацикливался на простой конкатенации моего filepath в цикле, изменении каталога на соответствующую папку и открытии файла.Вот код (вне цикла for с просто i = 1, для простоты):

drive = dir()
namelist = dir(drive)
filepath = strcat(drive, namelist[1])
cd(filepath)
x = xlsread('filename.csv')

Я также попытался определить путь к файлу как путь к самому файлу:

filepath = strcat(drive, namelist[1], '\filename.csv')
x = xlsread(filepath)

Оба метода выдают сообщение об ошибке при использовании cd или при использовании xlsread, что «аргументы должны содержать символьный вектор».

Я также пытался использовать fullfile вместо strcat,безрезультатно.

1 Ответ

0 голосов
/ 19 ноября 2018

dir() возвращает массив структуры в вашем текущем каталоге.Так что drive = dir() даст вам массив struct drive.Например:

drive = 
  81×1 struct array with fields:
    name
    folder
    date
    bytes
    isdir
    datenum

В соответствии с вашей проблемой, во-первых, чтобы получить список имен каталогов, вы можете сделать это:

drive = dir()
namelist = {drive([drive(:).isdir]).name}

Это даст вам массив ячеек каталогаИмена.

Поскольку . и .. являются текущим каталогом и родительским каталогом.Возможно, вы захотите удалить эти два (обычно это первый и второй элемент):

namelist(1) = []
namelist(1) = []

Затем, чтобы перейти к пути этих каталогов, вы можете сделать это:

for i =1:length(namelist)
    filepath = strcat(pwd, '\', namelist{i},'\filename.csv')
    x = csvread(filepath)
end
...