MatLab doesn't read my .TXT file correct

65 次查看(过去 30 天)
Hello everyone,
i have an issue where my .TXT file is not readable my MatLab. I am not sure what to do. Can somebody please give me a hint? I can open it with other tools like "Atom".
Thanks in advance!
  2 个评论
Jeremy Hughes
Jeremy Hughes 2018-7-20
It would help to see the actual file. My suspicion is that the file is encoded with something MATLAB doesn't expect, like UTF-16.
Peter Bu
Peter Bu 2018-7-20
Oh yes. I missed to attach the file. Here it is :-)

请先登录,再进行评论。

采纳的回答

Jeremy Hughes
Jeremy Hughes 2018-7-20
Thanks for uploading the file!
The first issue I see is that the file has a UTF-16 byte-order-mark. The file is stored as UTF-16 which isn't fully supported in MATLAB. This is why you see the extra boxes between each of the characters.
I did the following to check that your file even needed to be UTF-16--it doesn't.
fid = fopen('Charge4_Probe_3.txt','r','n')
bytes = fread(fid)';
fclose(fid);
bytes(1:20) % inspect a few of the bytes, you can see what's going on
bytes(1:2) = []; % remove the byte order mark
any(bytes(2:2:end) ~= 0) % every other byte is NULL
So none of the characters are using the second byte--effectively this is an ascii file. I'd look into the source of the file and see if you can get it as utf-8 (that will half the file size)
To get a new file, you can write as follows:
asciibytes = bytes(1:2:end) % strip out the zero bytes
fid = fopen('Charge4_Probe_3_ascii.txt','w','n','UTF-8');
fwrite(fid,asciibytes);
fclose(fid);
This is now ready to be read. (Note: as Aquatris mentions, these are using a decimal separator of comma.)
To read this programatically, you can do this:
opts = detectImportOptions('Charge4_Probe_3_ascii.txt','Delimiter','\t');
opts.DataLines = [4,inf];
opts = setvartype(opts,'double');
opts = setvaropts(opts,'DecimalSeparator',',');
T = readtable('Charge4_Probe_3_ascii.txt',opts);
head(T)
Hope this helps,
Jeremy
  2 个评论
Peter Bu
Peter Bu 2018-7-20
Thanks a lot for your time and the detailed answer!
Noam Greenboim
Noam Greenboim 2020-5-21
Here is an easy way to tell the encoding of your file:
Usage:
FileEncoding = BOM('Charge4_Probe_3.txt')
This uses the same idea as described above.

请先登录,再进行评论。

更多回答(1 个)

Aquatris
Aquatris 2018-7-20
Your data has comma (,) in them. I do not think Matlab can read values with commas, i.e., 2,230. You should change those commas to dots as in answered in another question in this forum .
  2 个评论
Aquatris
Aquatris 2018-7-20
编辑:Aquatris 2018-7-20
Also, I used Matlabs "import data" functionality and it was able to read the data correctly, just the variables with commas were NaN instead.
Peter Bu
Peter Bu 2018-7-20
also thank you for your time and answer :-)

请先登录,再进行评论。

Community Treasure Hunt

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

Start Hunting!

Translated by