1

我正在尝试将一个 txt 文件从 GUI 传递给 som_read_data ......我创建了一个函数,该函数从 GUI 获取一个 txt 文件,然后将其传递给 som_read_data ..但我遇到了一些错误......这是一些错误的列表.....任何有想法的人?

??? Error using ==> ftell
Invalid file identifier.  Use fopen to generate a valid file identifier.

Error in ==> som_read_data at 169
  fpos1 = ftell(fid); c1 = 0;      % read first non-comment line

Error in ==> prog_som at 3
sD = som_read_data(m);
4

3 回答 3

2

该错误表明您的文件标识符可能无效。你检查过了吗?

您通过调用获得文件标识符(fid在您的函数中) ,如果文件在当前目录中,则为文件名,否则为包含路径名的文件名。som_read_datafid=fopen(fileName)fileName

要调试,您可能需要调用[fid,message] = fopen(fileName)并检查是否message为空。如果不是,则打开文件时出错,因此fid不是有效的文件标识符。

编辑你可能想看看message说了什么。我敢打赌,它类似于“找不到文件”,要么是因为文件不在路径上,要么是因为您错过了扩展名。

EDIT2查看 som_read_data 以查找fid在第 169 行使用之前返回的函数。如果该行显示fid = fopen(m),那么您应该将文件名传递给som_read_data,即 call som_read_data(B)

于 2010-04-19T15:05:10.403 回答
2

该错误表明您没有先打开文件,或者FOPEN无法正确打开文件。如果返回的文件标识符的值是-1在调用FOPEN之后,则表明发生了错误(例如试图打开一个不存在的文件)。

编辑:

根据您的评论,您正在错误地构建文件的路径。您应该创建B如下:

B = [pathname,filename];  %# Append filename to the end of pathname
%# Or
B = fullfile(pathname,filename);  %# In case pathname doesn't have a file
                                  %#   separator (`\` or '/') on the end

您的顺序颠倒了 ( B = [filename,pathname];),这会给您一个无效的文件路径,从而fid在尝试使用FOPEN打开文件时提供一个无效的文件标识符。

于 2010-04-19T15:05:36.613 回答
2

看起来您正在使用SOMTOOLBOX中的som_read_data函数。该函数假设获取数据文件名作为参数。但是您通过 textread 将文件读入 m 变量并将其传递给 Prog_som.m,后者将其传递给 som_read_data。我不知道 Prog_som.m 是否对 m 变量进行了处理。无论如何尝试通过 B 而不是 m:

[filename, pathname] = uigetfile( ...
B = fullfile(pathname,filename);
x = prog_som(B);

还要确保您的文件是 SOM_PAK 格式。您可以在 som_read_data.m 的注释中找到它的描述。

于 2010-04-19T16:17:30.707 回答