使用Matlab更改文件中的文本行

时间:2017-08-10 06:43:45

标签: matlab dxf

因此,我必须修改.dxf文件(Autocad文件),方法是将其中的某些数据更改为我们之前选择的另一个数据。在Matlab中更改.txt文件的某些行并不是很困难。

但是,当新输入的长度大于旧输入时,我无法更改特定行。

这就是我所拥有的,我只想改变1D57:

TEXT
 5
1D57
330
1D52
100
AcDbEntity
  8
0

如果我作为输入BBBB,一切都正确,因为两个字符串具有相同的长度。当我尝试使用BBBBbbbbbbbbbb时,同样的情况不适用:

TEXT
5
BBBBbbbbbbbbbb2
100
AcDbEntity
  8
0

删除后面的所有内容,直到字符串停止。当输入较短时,它会发生相同的情况:它不会更改新字符串的行,但会在新输入停止之前写入。例如,在我们使用AAA作为输入的情况下,结果将是AAA7。

这基本上就是我用来修改文件的代码:

fID = fopen('copia.dxf','r+');
for i = 1:2
    LineToReplace = TextIndex(i);    
    for k = 1:((LineToReplace) - 1);
       fgetl(fID);
    end
    fseek(fID, 0, 'cof');

    fprintf (fID, [Data{i}, '\n']);
end
fclose(fID);

1 个答案:

答案 0 :(得分:2)

您需要至少覆盖​​文件的其余部分才能更改它(除非替换确切的字符数),如jodag的评论中所述。例如,

  % String to change and it's replacement
  % (can readily be automated for more replacements)
  str_old = '1D52';
  str_new = 'BBBBbbbbbbbbbb';

  % Open input and output files
  fIN = fopen('copia.dxf','r');
  fOUT = fopen('copia_new.dxf','w');

  % Temporary line
  tline = fgets(fIN);

  % Read the entire file line by line
  % Write it to the new file 
  % Replace str_old with str_new when encountered - note, if there is more 
  % than one occurence of str_old in the file all will be replaced - this can
  % be handled with a proper flag
  while (ischar(tline))
      % char(10) is MATLAB's newline character representation
      if strcmp(tline, [str_old, char(10)])
          fprintf(fOUT, '%s \n', str_new);
      else
          % No need for \n - it's already there as we're using fgets
          fprintf(fOUT, '%s', tline);
      end
      tline = fgets(fIN);
  end

 % Close the files
 fclose(fIN);
 fclose(fOUT);

 % Copy the new file into the original
 movefile 'copia_new.dxf' 'copia.dxf'

在实践中,简单地覆盖整个文件通常要容易得多。

如笔记中所述 - 这可以自动进行更多替换,并且还需要一个额外的标志来仅替换给定的字符串一次。