Problem with importing a text file
16 次查看(过去 30 天)
显示 更早的评论
Hello,
I need to import text files to matlab and then import them to excel, but matlab won't import the whole file. My txt files look like this:
Date 25/05/2021 Time 10:42:31 Status OK
AA-Alg test1
Scan (#) 1 X (#) 1 Y (#) 1 Indentation (#) 1
X-position (um) 2000.000
Y-position (um) 1999.920
Z-position (um) 2291.040
Z surface (um) 2296.040
Piezo position (nm) (Measured) -31.5
k (N/m) 0.290
Tip radius (um) 24.500
Calibration factor 2.488
SMDuration (s) 4.7
Control mode: Load
Measurement: Indentation
Profile:
D[Z1] (nm) 0.000 t[1] (s) 0.500
D[Z2] (nm) 5.000 t[2] (s) 5.000
D[Z3] (nm) 0.000 t[3] (s) 5.000
D[Z4] (nm) 0.000 t[4] (s) 0.500
Model: Hertz
P[max] (uN) 5.027
D[max] (nm) 0.000
D[final] (nm) 0.000
D[max-final] (nm) 0.000
Slope (N/m) 0.000
E[eff] (Pa) 9890.152
E[v=0.500] (Pa) 7417.614
Time (s) Load (uN) Indentation (nm) Cantilever (nm) Piezo (nm) Auxiliary
0.000000 -0.010260 0.000000 -35.378081 20.677123 -0.004944
0.001000 -0.009494 0.000000 -32.737571 20.849585 -0.004863
0.002000 -0.007694 0.000000 -26.531443 21.049583 -0.004944
0.003000 -0.005115 0.000000 -17.636515 21.626005 -0.004863
But when I import them, it only imports the lower part:
Time (s) Load (uN) Indentation (nm) Cantilever (nm) Piezo (nm) Auxiliary
0 -0.01026 0 -35.378081 20.677123 -0.004944
0.001 -0.009494 0 -32.737571 20.849585 -0.004863
0.002 -0.007694 0 -26.531443 21.049583 -0.004944
0.003 -0.005115 0 -17.636515 21.626005 -0.004863
0.004 -0.002357 0 -8.126755 22.18949 -0.004783
0.005 0.000083 0 0.285939 22.358716 -0.004823
This is the part of my code that doesn't do what I want it to:
data = readtable(A, 'PreserveVariableNames', true);
writetable(data, 'myData.xls','Sheet', i);
I tried using the import tool aswell and it also didn't import the whole file.
I believe the problem is with delimiters but so far I couldn't find the right ones.
Please help, thank you in advance.
0 个评论
采纳的回答
dpb
2021-7-26
"... it only imports the lower part:"
Of course, because the file is a mishmash of stuff and only the last section is a regular array that can be recognized by an automated system without help in being told the structure of the file.
The file format was prepared for human, not machine consumption -- to read it you'll have to use low level i/o functions like textscan and/or fgetl, fscanf with specific formats that can parse the input records in the sequence in which they are in the file. This is doable, but certainly will be a fair amount of tedium in doing so.
You could start by readcell and get it all in memory in a cell array and then start parsing from memory.
6 个评论
dpb
2021-7-27
编辑:dpb
2021-7-27
Oh. That's a wholly different Q? than the one interpreted from the one asked.
That's trivial in ML, too...
d=dir(fullfile(rootdir,'*.txt')); % use appropriate wild card, directory structure
fn=fullfile(outrootdir,'outfile.xlsx'); % define output file
for i=1:numel(d)
data=readcell(fullfile(d(i).folder,d(i).name));
writecell(data,fn,'sheet',"Sheet"+i)
end
You can, of course, create the sheet name to be whatever is wanted with compose or just use the incremental number of the loop counter, i
When MATLAB tries to "importdata" it presumes one intends to use those numeric values in calculations and, therefore, turn them into variables.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Spreadsheets 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!