[英]Saving strings from the input .txt filename - MATLAB
通過textscan,我正在讀取許多.txt文件:
fid1 = fopen('Ev_An_OM2_l5_5000.txt','r');
這是一種簡化,因為實際上我正在通過以下方式加載數百個.txt文件:
files = dir('Ev_An*.txt');
.txt文件本身中不存在的重要信息而是文件名的一部分。
有沒有一種方法可以簡潔地提取文件名的一部分並將其另存為字符串/數字? 例如,將上述文件名中的“ OM2”和“ 5000”另存為變量。
fileparts
似乎需要文件的完整路徑,而不是像textscan
那樣僅默認為MATLAB文件夾。
這取決於文件名的固定程度。 如果文件名在字符串filename
,則可以使用regexp
提取文件名的一部分,如下所示:
filename = 'Ev_An_OM2_l5_5000.txt'; %or whatever
parts = regexp(filename,'[^_]+_[^_]+_([^_]+)_[^_]+_([^\.]+)\.txt','tokens');
假設您的filename
始終為以下形式,這將為您提供parts{1}=='OM2'
和parts{2}=='5000'
something_something_somethingofinterest_something_somethingofinterest.txt
更新:
如果您更喜歡結構而不是單元格,則可以這樣命名令牌:
parts = regexp(filename,'[^_]+_[^_]+_(?<first>[^_]+)_[^_]+_(?<second>[^\.]+)\.txt','names');
在這種情況下, parts.first=='OM2'
和parts.second=='5000'
。 顯然,您可以根據令牌的實際含義來命名令牌,因為它們很重要。 您只需要在上面的代碼中相應地更改first
和second
。
更新2:
如果使用dir
獲取文件名,則應該有一個結構數組,其中包含不必要的信息。 如果您真的只需要文件名,則可以使用如下所示的for循環:
files = dir('Ev_An*.txt');
for i=1:length(files)
filename=files(i).name;
parts = regexp(filename,'[^_]+_[^_]+_(?<first>[^_]+)_[^_]+_(?<second>[^\.]+)\.txt','tokens');
%here do what you want with parts.first, parts.second and the file itself
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.