如何通过Matlab从文本文件中读取数字

时间:2016-08-08 02:53:51

标签: matlab

我有1000个文本文件,想要从每个文件中读取一个数字。

文本文件的格式为:

clc
clear
MyFolderInfo = dir('yourpath/folder');
fidin = fopen(file_name,'r','n','utf-8');
while ~feof(fidin)
    tline=fgetl(fidin);
    disp(tline)
end
fclose(fidin); 

我需要读取每个txt文件中“#####”背后的数字(“1217653”)。

该号码将在所有文本文件中紧跟“#####”。

“#####”并且关闭后面的数字只会在每个文件中出现一次。

var testarray = [];
this.groupsRef = this.getRef().child('groups').orderByChild('id').equalTo(groups[i]);
        this.groupsRef.on('value', (snap1) => {

             snap1.forEach((child1) => {
              testarray.push(child1.val())

            });


        });

尚未完成。我遇到了空格线后无法读取的问题。

2 个答案:

答案 0 :(得分:4)

这是使用函数regex的另一种方法。这将很容易提供更高级的文件读取方式,并且不需要一次性读取整个文件。与已经给出的示例的区别基本上是我逐行读取文件,但由于该示例使用此方法,我认为值得回答。这将返回" ##### NUMBER"

所有次出现
function test()
h = fopen('myfile.txt');
str = fgetl(h);
k = 1;
while (isempty(str) | str ~= -1 ) % Empty line returns empty string and EOF returns -1
    res{k} = regexp(str,'#####\d+','match');
    k = k+1;
    str = fgetl(h);
end

for k=1:length(res)
    disp(res{k});
end

修改

使用表达式' #####(\ d +)'并且参数'tokens'而不是'match'将实际返回" #####"之后的数字。作为一个字符串。除了展示阅读文件的另一种方式之外,本文的目的还在于展示如何使用regexp作为一个简单的例子。两种替代方案都可以使用适当的转换。

答案 1 :(得分:2)

假设如下:

  • 所有文件都是ASCII文件。
  • 您要提取的数字直接跟在#####
  • 之后
  • 您正在寻找的号码是自然数。
  • #####后跟一个数字,每个文件只出现一次。

您可以在for循环中使用此代码段来提取每个数字:

regx='#####(\d+)';
str=fileread(fileName);

num=str2double(regexp(str,regx,'tokens','once'));

for循环的示例

此代码将遍历yourpath/folder中的所有文件并将数字保存到num

regx='#####(\d+)'; % Create regex

folderDir='yourpath/folder';
files=cellstr(ls(folderDir)); % Find all files in folderDir
files=files(3:end); % remove . and ..

num=zeros(1,length(files)); % Pre allocate

for i=1:length(files) % Iterate through files
str=fileread(fullfile(folderDir,files{i})); % Extract str from file
num(i)=str2double(regexp(str,regx,'tokens','once')); % extract number using regex
end

如果您想提取更多''高级''例如数字整数或实数,或处理文件中多次出现的#####NUMBER,您需要更新问题并更好地表示文本文件。