Read a file with textscan.
3 次查看(过去 30 天)
显示 更早的评论
I have a text file that I'm trying to read with textscan. The top of my file looks like
######################################################################
Test File Name: MNTFEPLANC-122-202203171547
Timestamp: 202203171547
Test Type: FILL Valve Selction: BOTH Valve Cycle Time: 2
######################################################################
20220317154734, 0.0, 0.0, 0.0, 0.0,17714,17449,20464,17041,17028, 0.000000,0.000000,0.000000
20220317154734, 0.0, 0.0, 0.0, 0.0,17714,17449,20464,17041,17028, 0.000000,0.000000,0.000000
20220317154734, 0.0, 0.0, 0.0, 0.0,17714,17449,20464,17041,17028, 0.000000,0.000000,0.000000
20220317154734, 0.0, 0.0, 0.0, 0.0,17714,17449,20464,17041,17028, 0.000000,0.000000,0.000000
20220317154734, 0.0, 0.0, 0.0, 0.0,17714,17449,20464,17041,17028, 0.000000,0.000000,0.000000
20220317154734, 0.0, 0.0, 0.0, 0.0,17714,17449,20464,17041,17028, 0.000000,0.000000,0.000000
20220317154734, 0.0, 0.0, 0.0, 0.0,17714,17449,20464,17041,17028, 0.000000,0.000000,0.000000
20220317154734, 0.0, 0.0, 0.0, 0.0,17714,17449,20464,17041,17028, 0.000000,0.000000,0.000000
I open the file using
raw_data_file = fopen(file_name,'rt') % The full path of "file_name" has been ommitted for brevity.
which yields
raw_data_file =
17
I read the file using
fe_data_read = textscan(raw_data_file,'%f%f%f%f%f%f%f%f%f%f%f%f%f','Delimiter',',');
which yields
fe_data_read =
1×13 cell array
Columns 1 through 10
{0×1 double} {0×1 double} {0×1 double} {0×1 double} {0×1 double} {0×1 double} {0×1 double} {0×1 double} {0×1 double} {0×1 double}
Columns 11 through 13
{0×1 double} {0×1 double} {0×1 double}
I tried to create a variable with values being the first column using
test_date_time = fe_data_read{1}
which yields
test_date_time =
0×1 empty double column vector
Why is "test_date_time" not being populated with the values in the first column of my text file? What am I doing wrong?
0 个评论
回答(2 个)
Jan
2022-3-25
编辑:Jan
2022-3-25
The file starts with this line:
######################################################################
This does not match the format string '%f%f%f%f%f%f%f%f%f%f%f%f%f' or the Delimiter=',' in any way. Therefore textscan replies an empty output.
You have to tell textscan, that the first 6 lines are a header and have to be skipped. Use the 'Headerlines" argument.
By the wya, do you have a reason to open the file in the slower text mode?
5 个评论
Stephen23
2022-3-28
That file has a mix of newline characters, but Walter Roberson's code imports it without any problems:
fnm = 'orig_data_trim.txt';
opt = detectImportOptions(fnm, 'HeaderLines', 6);
opt = setvartype(opt, 1, 'datetime');
opt = setvaropts(opt, 1, 'InputFormat', 'uuuuMMddHHmmss');
T = readtable(fnm, opt)
Stephen23
2022-3-25
opt = {'Delimiter',',','Headerlines',6,'CollectOutput',true};
fmt = ['%{uuuuMMddHHmmss}D',repmat('%f',1,12)];
fid = fopen('new.txt','rt');
tmp = textscan(fid,fmt,opt{:});
fclose(fid);
tmp{1}
tmp{2}
1 个评论
Walter Roberson
2022-3-26
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/941499/new.txt';
opt = detectImportOptions(filename, 'HeaderLines', 6);
opt = setvartype(opt, 1, 'datetime');
opt = setvaropts(opt, 1, 'InputFormat', 'uuuuMMddHHmmss');
T = readtable(filename, opt)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Text Data Preparation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!