簡體   English   中英

如何使用TEXTSCAN在MATLAB中讀取文本文件的其余部分?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM