【问题标题】:Matlab fopen error with csv filecsv文件的Matlab fopen错误
【发布时间】:2018-10-09 10:27:44
【问题描述】:

我只是想使用 textscan 函数将 csv 文件导入 Matlab。但是每次我运行程序它总是抛出这个错误

使用文本扫描时出错 文件标识符无效。使用 fopen 生成一个 有效的文件标识符。

但正如您在下面的代码中看到的那样,我正在使用 fopen 来准备文件以供 textscan 使用。

S = 'Proto2.csv';
fidi = fopen(S);
C = textscan(fidi, '%f%s%f%f%f%f%f%f%s%f%f%f%f%f%f%f%f%f%f%f%f%f%f', 'Delimiter','\n', 'HeaderLines',11, 'CollectOutput',1);

之后我使用 C 从 csv 文件中获取我需要的数据

【问题讨论】:

    标签: matlab csv


    【解决方案1】:

    通常,在对文件句柄进行读取和/或写入操作之前,您必须确保 fopen 函数返回的句柄有效。来自Matlab的official documentation

    fileID = fopen(filename) 打开文件,filename,用于二进制读取 访问,并返回一个等于或大于的整数文件标识符 大于 3。MATLAB® 为标准保留文件标识符 0、1 和 2 分别是输入、标准输出(屏幕)和标准错误。

    如果fopen无法打开文件,则fileID为-1。

    在继续textscan 之前检查您的fidi 变量值,我很确定它等于-1。发生这种情况要么是因为找不到文件(如果你没有指定完整的绝对路径,Matlab 会在当前工作目录中搜索它)或者因为文件有共享锁(因此,请确保在您尝试读取它时它没有被其他应用程序使用)。

    【讨论】:

    • 谢谢你,你是对的,我只需要停止给 fopen 一个完整路径,而是将文件移动到当前目录中,它现在就像一个魅力。我仍然有一个问题,那就是它似乎没有正确导入数据,它只是创建了一个奇怪的 5 行数组,其中 3 行是空的,只有 csv 文件的一行被导入到这个数组中,但在一个牢房里。我的分隔符有问题吗?
    • 除非您展示文件的外观,否则只有您自己知道。
    • code 31809,Lisa Herrmann,14:03:50,47.87631872,13.5672457,29,0,0,1.5E+12,172,172,88.1,88.1,0.1,117.1,0.9,0.1,2013。 ,117.1,114.8,88.2,287.5,287.5 code
    • 这就是一行 csv 文件的样子,我也让它正确导入,但它似乎没有导入数字,而是只为 3500 行中的每个人提供 NaN 值
    • 我讨厌textscan。这很棘手,并且倾向于根据底层变量类型拆分输出。我建议您改用readtable...一切都会自动处理,无需使用文件句柄。只需输入readtable('myfile.txt'),一切都会像魅力一样毫不费力地发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2021-09-08
    • 2019-04-29
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多