如何在文本文件中找到一个不完全已知的字符串,并在matlab中替换它?
我有一个相当大的文本文件,其中一个像下面这样的字符串重复了50次如何在文本文件中找到一个不完全已知的字符串,并在matlab中替换它?,matlab,text,replace,find,Matlab,Text,Replace,Find,我有一个相当大的文本文件,其中一个像下面这样的字符串重复了50次 NODE LABEL="NODE-1", LENGTH=(0.001,0.69, 1.805, 5, 10, \ 这些重复字符串之间的唯一区别是=()后面的第一个数字 我的意思是字符串如下所示: NODE LABEL="NODE-1", LENGTH=(0.001,0.69, 1.805, 5, 10, \ NODE LABEL="NODE-2", LENGTH=(0.005,0.69, 1.805, 5, 10, \ NODE
NODE LABEL="NODE-1", LENGTH=(0.001,0.69, 1.805, 5, 10, \
这些重复字符串之间的唯一区别是=(
)后面的第一个数字
我的意思是字符串如下所示:
NODE LABEL="NODE-1", LENGTH=(0.001,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-2", LENGTH=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-3", LENGTH=(0.067,0.69, 1.805, 5, 10, \
我在MATLAB中有一个向量,如下所示:
d =[0.010
0.120
0.140]
首先,我想识别那些包含上述字符串的行。然后,我需要用向量d
中相应的数字替换文本文件每行中的第一个数字。
这意味着,我的输出文本文件如下所示:
Bla Bla Bla Bla
NODE LABEL="NODE-1", LENGTH=(0.010,0.69, 1.805, 5, 10, \
Bla Bla Bla Bla
Bla Bla Bla Bla
NODE LABEL="NODE-2", LENGTH=(0.012,0.69, 1.805, 5, 10, \
Bla Bla Bla Bla
NODE LABEL="NODE-3", LENGTH=(0.014,0.69, 1.805, 5, 10, \
我怎么做
我的问题的实质是,如何在文本文件中找到像
LENGTH=(NUMBER,
)这样的字符串,而NUMBER
是未知的。在您的问题中,不清楚id输入文件可以包含没有“LENGTH=(”字符串)的行
我想可以
给定指定的输入文件行的格式,您可以:
- 使用
findstr
- 再次使用
findstr
- 将字符串部分替换为“d”数组中的数字,并将其转换为字符串
NODE LABEL="NODE-1", LENGTH=(0.001,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-2", LENGTH=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-3", WIDTH=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-4", XXXX=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-5", YYYYYYYY=(0.067,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-6", LENGTH=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-1", LENGTH=(0.010,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-2", LENGTH=(0.120,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-3", WIDTH=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-4", XXXX=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-5", YYYYYYYY=(0.067,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-6", LENGTH=(0.140,0.69, 1.805, 5, 10, \
脚本
% Define the array with replacing values
d =[0.010
0.120
0.140];
% Get the number of possible replaceable input file strings
n_val=length(d);
% Open INPUT and OUTPUT files
fp_in=fopen('in_file.txt','rt')
fp_out=fopen('out_file.txt','wt')
% Initialize counter
cnt=1;
% Read the input file line by line
while(1)
tline = fgetl(fp_in)
if(ischar(tline))
% If current input line contains the "LENGTH=(" string, try to
% replace the number
if(findstr(tline,'LENGTH=('))
% If "d" array does not contains enough values, generate error
% message
if(cnt > n_val)
error('Not enough values in "d" array')
end
% Replace the number in the string with a value from "d" array
b=findstr(tline,'(')
c=findstr(tline,',')
tline(b+1:c(2)-1)=sprintf('%4.3f',d(cnt))
% Print the modified line in the OUTPUT file
fprintf(fp_out,'%s\n',tline)
% Increment the counter
cnt=cnt+1
else
% If the current line does not contains the "LENGTH=(" string,
% writhe the line in the OUTPUT file as it is
fprintf(fp_out,'%s\n',tline)
end
else
% Stop reading INPUT file
break
end
end
% Close INPUT and OUTPUT files
fclose(fp_in);
fclose(fp_out);
输出文件
NODE LABEL="NODE-1", LENGTH=(0.001,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-2", LENGTH=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-3", WIDTH=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-4", XXXX=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-5", YYYYYYYY=(0.067,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-6", LENGTH=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-1", LENGTH=(0.010,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-2", LENGTH=(0.120,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-3", WIDTH=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-4", XXXX=(0.005,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-5", YYYYYYYY=(0.067,0.69, 1.805, 5, 10, \
NODE LABEL="NODE-6", LENGTH=(0.140,0.69, 1.805, 5, 10, \
希望这有帮助。查找正则表达式。您可以将它们用于此目的。好的,它工作正常。使用权限“w”和“wt”打开输出文件有什么区别?当我使用第一个时,输出文件中的行在同一行上连续打印。而使用最后一个权限在t上打印t行下一(新)行。Addind
t
指定必须在文本模式下打开文件。这不应是将输出写入一行的原因。onwrite
添加t
意味着在输出中的任何换行符之前插入回车符(请参阅)。