Manipulate numbers in existing txt file
4 ビュー (過去 30 日間)
古いコメントを表示
Hi,
I want to manipulate numbers in a txt file which was created by catia. The txt file looks like this:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/167825/image.png)
Catia puts a space between every string and float. For example I want to change 'l_overall (mm)' to 5000.
Thank you for your help!
1 件のコメント
Walter Roberson
2017 年 12 月 18 日
I notice that there is a space between l_overall and (mm) and a space between w_overall and (mm) but no space between h_overall and (mm) . Is the actual file consistent about the space there or not?
Can we assume that the variables are always in exactly the same order and that we can assume that l_overall will be the first entry on the line (for example) ? Or is it necessary to match the strings to determine which column to make the change to ?
Is it possible that the fields are really tab delimited rather than space delimited ?
採用された回答
Walter Roberson
2017 年 12 月 19 日
fid = fopen('Table1.txt', 'rt');
colnames = fgetl(fid);
colvals = fscanf(fid, '%f', [1 inf]);
fclose(fid)
colvals(1) = 5000;
fid = fopen('newTable1.txt', 'wt');
fprintf(fid, '%s\n', colnames);
fprintf(fid, '%g\t', colvals(1:end-1));
fprintf(fid, '%g\n', colvals(end));
fclose(fid)
その他の回答 (1 件)
YT
2017 年 12 月 18 日
I don't know if I understand the question correctly, but if you want to change 'l_overall (mm)' to '5000' in your text file, you can do something like this (I assumed that your text file looks something like the test.txt I attached)
clear all;
fileID = fopen('test.txt');
C = textscan(fileID,'%s','delimiter','\n');
fclose(fileID);
C{:} = strrep(C{:},'l_overall (mm)','5000'); %replacing 'l_overall (mm)' by '5000'
writetable(cell2table(C{:}),'updated_data.txt','WriteVariableNames',0) %writing the new data
3 件のコメント
Walter Roberson
2017 年 12 月 19 日
You would get that textscan error if you provided the wrong filename to fopen()
Walter Roberson
2017 年 12 月 19 日
"There is a space between every column header, unit and variable"
The delimiter between columns is tab, just as I had guessed.
参考
カテゴリ
Help Center および File Exchange で String Parsing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!