有没有办法只读取输入文件的一行的一部分?

伦纳德·布伦德巴斯(LeonardBlunderbuss)

我有一个例程可以打开查找表文件,以在写入文件之前查看是否已存在某个条目。每行包含大约2500列数据。我需要检查每行的前2列,以确保该条目不存在。

我不想为了检查2个条目而每行都必须阅读2500列。我试图使用该fscanf函数,但是Invalid size当我尝试仅读取2列时,它给我一个错误。有没有办法只读取输入文件每一行的一部分?

        if(exist(strcat(fileDirectory,fileName),'file'))
            fileID = fopen(strcat(fileDirectory,fileName),'r');
            if(fileID == -1)
                disp('ERROR: Could not open file.\n')
            end  
            % Read file to see if line already exists
            dataCheck = fscanf(fileID, '%f %f', [inf 2]);
            for i=1:length(dataCheck(:,1))
                if(dataCheck(i,1) == sawAnglesDeg(sawCount))
                    if(dataCheck(i,2) == sarjAnglesDeg(floor((sawCount-1)/4)+1))
                        % This line has already been written in lookup table
                        lineExists = true;
                        disp('Duplicate lookup table line found. Skipping...\n')
                        break;
                    end
                end
            end
            fclose(fileID);
        end
杰斯珀·格罗斯(Jesper Grooss)

好吧,不是真的。

您应该可以循环执行前两个双打的fscanf,然后是fgetl以读取行的其余部分,即形式:

while there_are_more_lines
   dataCheck = fscanf(fileID, '%f', 2);
   fgetl(fileID); % Read remainder of line, discarding it
   % Do check here for each line
end

由于它是一个文本文件,因此您不能真正跳过从文件中读取字符的操作。对于二进制文件,您可以执行一次fseek,它可以基于字节数在文件中跳转-如果您确切知道下一行的开始位置(以字节数为单位),则可以使用它。但是对于文本文件,您并不知道,因为每一行的长度都会有所不同。如果将数据保存在二进制文件中,则可以执行类似的操作。

我可能会做的事情:创建两个文件,第一个文件包含两个“校验值”,可以快速读取它们,另一个文件包含2500列数据,有或没有两个“校验值” 。它们应该同步更新;将一行添加到第一个文件时,也将一行添加到第二个文件。

而且我肯定会做一个checkData矩阵变量,并将其尽可能长地保存在内存中;在向文件添加新行时,还需要更新checkData矩阵,因此您最初只需要读取一次文件,并在程序的余下时间使用checkData矩阵即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法在fortran中读取文件的一部分?

有没有办法隔离字符串的一部分?

有没有办法突出显示发生错误的行的一部分

如何只读取大文件中一行的一部分?

有没有办法在vscode上隐藏我的python代码的一部分?

有没有办法将 javascript 变量用作 PHP SQL 页面的一部分?

有没有办法在mdraid5设置中仅重建磁盘的一部分?

有没有办法在c#中注释掉字符串的一部分?

有没有办法在侧边栏中添加主导航的一部分?

有没有办法在MongoDB中返回文档中数组的一部分?

有没有办法隐藏从Wagtail管理页面树创建的URL的一部分?

有没有办法只能解析字符串的一部分?

有没有办法在颤动中仅更改图标颜色的一部分?

有没有办法从另一个 JS 文件中读取 JS 代码作为 JS 文件的一部分?(该应用程序使用 NodeJS)

有没有办法像c#这样在Excel的VBA中注释行的一部分

有没有办法用 php 一致地阅读电子邮件正文的一部分(回复)

有没有办法检查网址的一部分是否包含某个字符串

有没有办法将粗体样式添加到 Word VBA 组合框文本条目的一部分?

有没有办法存储我的存储库的一部分以进行部署并能够进行git pull

有没有办法在C ++正则表达式中重用模式的一部分?

有没有办法在Python中使用熊猫(或其他库)提取数据框的一部分?

有没有办法用css3和html5的新实现隐藏div的一部分?

有没有办法在 python 中使用 selenium 来抓取地址栏中的页面 url(或其中的一部分)?

序列化类的一部分时,有没有办法保留XML属性?

有没有办法在Warp中作为过滤器的一部分进行验证?

有没有办法在<p>内用<img src>替换一部分文本?

有没有办法只更改 QTextEdit 中的一部分文本?

有没有办法使用 jQuery 操作 HTML 复选框的一部分值?

有没有办法将 Cells.Address 作为范围(“A1:Cells.Address”)的一部分用于函数的输入?