I have a txt file in which there are a bunch of lines. The first two lines are shown below:
10125731872 50 3731 -9999 307 166 -9999 827 4090 -9999 587 332 5 -9999
10125731873 50 117 322 9 -9999 187 300 1273 280 103 -9999 39 -9999
I need to add an "M" after all -9999 values. In a text editor this would be simply done by using the replace tool while looking for all "-9999 " and replacing them with "-9999M". Simple! But I have a hard time doing the same thing in Matlab.
Any idea how I can do this simple task?
Thanks.

 採用された回答

Walter Roberson
Walter Roberson 2020 年 8 月 12 日

1 投票

filename = 'a_txt_file.txt';
new_filename = ['new_' filename];
S = fileread(filename);
S = regexprep(S, '-9999\>', '$&M');
fid = fopen(new_filename, 'w');
fwrite(fid, S);
fclose(fid);
It is recommended that new_filename be different than filename: otherwise if something goes wrong in the writing process, you could lose your only copy of the input.

5 件のコメント

Kian
Kian 2020 年 8 月 12 日
Thanks for the quick answer.
It works, but there is still a small problem. See this is what I got using the syntax you gave me:
10125731872 50 3731 -9999M 307 166 -9999M 827 4090 -9999M 587 332 5 -9999M
10125731873 50 117 322 9 -9999M 187 300 1273 280 103 -9999M 39 -9999M
while this is what I am looking for:
10125731872 50 3731 -9999M 307 166 -9999M 827 4090 -9999M 587 332 5 -9999M
10125731873 50 117 322 9 -9999M 187 300 1273 280 103 -9999M 39 -9999M
Basically, the space that goes after -9999 should be replace with M (rather than just adding an M after -9999 (to keep the formatting of the original txt).
Thanks again.
Kian
Kian 2020 年 8 月 12 日
Okay, I think I found a quick way:
S = regexprep(S, '-9999 \>', '-9999M');
But thanks anyway. It was easy peasy (with the hint you gave me of course)!
Kian
Kian 2020 年 8 月 12 日
Just another point here. The syntax I suggested:
S = regexprep(S, '-9999 \>', '-9999M');
replaces only those -9999 which are in the middle of each line (as they have a space after), but those -9999 at the end of the lines were left out (as they don't have any space after). So once I ran the above regexprep, I had to repeat another one as follows to add M after those -9999 that are the end of each line:
S = regexprep(S, '-9999\>', '-9999M');
Kind of not very neat, but at least it worked. Thanks again for the assistance.
Walter Roberson
Walter Roberson 2020 年 8 月 12 日
編集済み: Walter Roberson 2020 年 8 月 12 日
regexprep(S, '-9999( |$)', '-9999M', 'lineanchors' )
Kian
Kian 2020 年 8 月 12 日
Thanks a lot. This is really neat!

サインインしてコメントする。

その他の回答 (1 件)

kuchina mani chandra
kuchina mani chandra 2023 年 4 月 3 日

0 投票

Function replaceStringIntxtFile(filepath,stringToReplace,ReplaceWith) Filedata = readlines(filepath); replacedFiledata =replace(Filedata,stringToReplace,ReplaceWith); F=fopen(filepath,'w'); fprintf(f,'%s\n'replacedFiledata); fclose(f) end

カテゴリ

ヘルプ センター および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by