-1

我想'Month'在包含数字和其他信息的文本文件中找到一个字符串,例如

*我的名字是迪

*月

2 3 4

3 6 8

4 87 9

*天

1, 4, 67,

2, 6, 98,

3, 55, 89,

4, 12, 34,

*达斯

*gfsd

*gdfd

*sdasd

*文件结束

并创建一个由这些数字组成的数组。接下来,我要搜索下一个字符串 ,'Day'并创建一个包含相应数字的数组。

目前我正在运行一个循环,搜索所有字符两次并找到数字。这使程序非常慢。任何人都可以建议一种更快的方法吗?

strToSearchFor = 'Month'; 
lengthStrToSearchFor = length(strToSearchFor); 
MonthArrayFlag =0;

for i=1:lengthAllFileChars
    fseek(fid9,i-1, 'bof');                                     
    tline = fscanf(fid9,'%c',lengthStrToSearchFor);
    if (strcmp(strToSearchFor,tline)==1)
        'FOUND IT';
        tline;
        for a = 1:lengthAllFileChars                        
            MonthNumber = fscanf(fid9, '%f,')';     
            if MonthArrayFlag == 0;
                MonthArray = zeros(1,4);                     
                MonthArray(1,:) =  nodeCoordinates;
                MonthArrayFlag = 1;
            else
                MonthArray = vertcat(MonthArray,MonthNumber);
            end
        end         
    end
end

然后重复此代码'DAY'

4

2 回答 2

0

您检查过“textscan”功能吗?您可能可以一次性读取文本文件的行(textscan(fid,'%s'))并检查关键字MONTH或DAY,如果它未命中,那么它是您可以在其中转动它的那些数字数组之一通过函数“str2num”将字符串转换为矩阵。如果您需要有关代码的帮助,我可能会为您提供一些粗略的代码,但不确定何时。您使用访问文件的函数越少,程序运行的速度就越快。这就是 textscan 的用武之地,它读取所有内容并将其放置在一个或多个单元格数组中。

于 2013-06-27T04:25:17.753 回答
0

完全按照另一张海报的建议使用 textscan ,这将(应该?)返回一个单元格数组,其中包含空格的所有内容都被分隔到自己的单元格中。

现在而不是遍历每个单元格等。而是这样做:

monthInd=find(strcmp('Month',yourNewCellArray)) 
%Keep in mind this IS case sensitive

dayInd= same thing ^^^ for day

endOfDayInd = same thing, 
%hopefully you have some way of knowing when numbers stop? 

那么你可以这样做:

monthVals=cell2mat(yourNewCellArray(monthInd+1:dayInd-1)) 
%pretty sure its () in this case rather than {}

唯一需要注意的是,其他海报方法是值现在是一个向量,而不是一个 3x3 矩阵。如果您不需要它们在矩阵中,或者可以将向量重塑为矩阵,那么您就可以开始了。

如果不是这样,所有的希望都不会丢失!将 textscan 中的 '%s' 替换为 char(10) ..这是新行 char。理想情况下,您的代码不需要更改来查找月份和日期索引,但现在中间的每一行数字将是它自己单独的字符串。

这可能需要一些调整,如果可能的话,可能需要一些先验知识,但至少应该给你一些想法:)

于 2013-06-27T05:41:27.467 回答