我有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())
});
});
尚未完成。我遇到了空格线后无法读取的问题。
答案 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)
假设如下:
#####
。#####
后跟一个数字,每个文件只出现一次。您可以在for
循环中使用此代码段来提取每个数字:
regx='#####(\d+)';
str=fileread(fileName);
num=str2double(regexp(str,regx,'tokens','once'));
此代码将遍历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
,您需要更新问题并更好地表示文本文件。