fprintf leaving remainder of line

2 ビュー (過去 30 日間)
Keith Holmlund
Keith Holmlund 2018 年 6 月 22 日
コメント済み: Walter Roberson 2018 年 6 月 22 日
I am reading a txt file into matlab using fopen then textscan. the text is reading into a single cell that 43x1 (So if I wanted to get line 43 I would enter File{1}(43,1)). I change some of the lines and rewrite the file as such
frewind(fileID)
for row=1:length(file{1})
fprintf(fileID,'%s\n',file{1}{row,1});
end
When I reopen the text file it leaves a portion of line 43 in a new line 44
(line 43) There is Ketchup on my hot dog
(line 44) on my hot dog
The rest of the text file is written correctly, what is causing this to happen? even if there is a line 44 generated, if it was blank it would be fine
  9 件のコメント
Keith Holmlund
Keith Holmlund 2018 年 6 月 22 日
going through it, the following ended up doing the trick
frewind(fileID);
for row=1:size(file{1},1)
fprintf(fileID,'%s\n',file{1}{row,1});
end
dpb
dpb 2018 年 6 月 22 日
Indeed.

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

回答 (1 件)

Jan
Jan 2018 年 6 月 22 日
If you overwrite a text file by a shorter string than the original, the remaining characters are not cropped. To reduce the file size, you need an extra tool like FEX: FileResize . You cannot do this in Matlab without recreating the file.
  1 件のコメント
Walter Roberson
Walter Roberson 2018 年 6 月 22 日
This is the correct answer. MATLAB does not provide any way to make a file shorter. The POSIX standard library defines I/O in the middle of a file as overwriting existing contents without truncating the file unless the user specifically asks for the file to be truncated (an action which there is unfortunately no MATLAB interface for.)

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

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

タグ

製品


リリース

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by