[英]How do I read in a series of numbers using “Textscan” in MATLAB if the file is mostly text?
[英]How do I read the rest of a line of a text file in MATLAB with TEXTSCAN?
我正在嘗試根據特定格式讀取包含數據的文本文件。 我正在使用textscan
和一個包含格式的字符串,以在一個代碼行中讀取整個數據集。 我發現了如何使用fgetl
讀取整行,但是我想使用盡可能少的代碼行。 所以我想避免自己的for循環。 textscan
似乎很棒。
作為示例,我將包含代碼的一部分,該代碼將讀取代表修改后的數據集的五個字符串,其遺產(舊數據集的名稱),修改的日期和時間以及最后的任何注釋。
fileID = fopen(filePath,'r+');
readContentFormat = '%s = %s | %s %s | %s';
content = textscan(fileID, readContentFormat, 'CollectOutput,1);
如果注釋中沒有任何定界符(例如空格),則此操作暫時有效。 但是,我希望能夠在該行的末尾寫評論。
有沒有一種方法可以使用textscan
並讓它知道我想將一行的其余部分讀取為一個字符串/字符數組(包括任何空格)? 我希望在變量readContentFormat
放入一些readContentFormat
,而不是最后的%s
。 還是有另一種方法不涉及循環遍歷文件中的每一行?
另外,即使我的數據非常有限,我還是希望了解有關計算效率或穩定性的不同方法的利弊。 如果您知道值得共享的內容,請這樣做。
一種令我滿意的方法(但無論如何也請共享其他方法!)是將分隔符設置為除空格以外的其他字符,並使用strtrim
修剪所有前導或尾隨空格。 這似乎工作得很好,但是我不知道計算的要求如何。
當前文件夾中的文本文件“ testFile.txt”具有以下幾行
File |Heritage |Date and time |Comment file1.mat | oldFile1.mat | 2018-03-01 14:26:00 | - file2.mat | oldFile2.mat | 2018-03-01 13:26:00 | - file3.mat | oldFile3.mat | 2018-03-01 12:26:00 | Time for lunch!
以下代碼將讀取數據並將其放入單元格數組中,而無需使用前導或尾隨空格,只需幾行代碼。 整齊!
function contentArray = myfun()
fileID = fopen(testFile.txt,'r');
content = textscan(fileID, '%s%s%s%s','Delimiter', {'|'},'CollectOutput', 1);
contentArray = strtrim(content{1}(2:4,:));
end
輸出:
tmpArr =
3×4 cell array
'file1.mat' 'oldFile1.mat' '2018-03-01 14:26:00' '-'
'file2.mat' 'oldFile2.mat' '2018-03-01 13:26:00' '-'
'file3.mat' 'oldFile3.mat' '2018-03-01 12:26:00' 'Time for lunch!'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.