معرفی تابع dir متلب (خواندن فایلها با اسم های مختلف)


احتمالا شما هم موقع خواندن فایلها با اسمهای مختلف در متلب، مخصوصا اگر اسم فایلها الگوی خاصی نداشته باشند، به مشکل خورده اید. همانند ماژول glob پایتون، متلب تابعی به اسم dir داره که این کار رو براتون راحت میکنه و اسم فایلها رو به صورت لیست به شما میده و شما راحت میتونید فایلها رو بخونید. تو این ویدیو کار با تابع dir متلب را توضیح داده ایم.

تابع dir متلب میتونه در یک مسیر مشخص شده، دنبال الگوی تعریف شده در فایلهای اون مسیر بگردد و اسم و مسیر اون فایلها رو به صورت یک ماتریس ساختاری در اختیار ما قرار دهد. برای مثال اگر ما میخواهیم فایلهایی که فرمت آن .jpg است را بخوانیم، کافیه بگیم دنبال فایلهایی هستیم که فرمتشان jpg هست یا به عبارتی دنبال فایلهایی هستیم که در اسم آنها الگوی .jpg وجود دارد. در ادامه به ترتیب نحوه کار با این تابع را توضیح میدهیم.

حالت اول: فایلهایی که در مسیر جاری هستند

فرض کنید کد و فایلها در یک مسیر مشترک قرار دارند، و میخواهیم همه فایلهایی که فرمتشان .txt هست را بخوانیم. به شکل زیر عمل میکنیم.

MATLAB

listName= dir('*.txt')

علامت * مشخص میکند که همه فایلهایی که در مسیر جاری الگوی .txt را دارند به ما بده. با اجرای این کد، اسامی به همراه سایر اطلاعات در داخل ماتریس ساختاری قرار میگیرند.

تابع dir متلب

همانطور که در عکس پیداست، 100 تا فایل .txt در مسیر جاری بود که تابع dir مشخصات اونهارو در داخل یک ماتریس ساختاری به ما داده است. اسم هر فایل و مسیرآن برای ما مهم است، که به صورت زیر میتوانیم به آنها دسترسی داشته باشیم و مسیر و اسم فایل رو بسازیم و خواستیم بخوانیم. در زیر اسم و مسیر اولین فایل .txt را جدا کرده و کنار هم قرار داده ایم.

MATLAB

name= listName(1).name;
folder= listName(1).folder;
filename= [folder,’\’,name];

کافیه یک حلقه بنویسیم و در هر تکرار اسم و مسیر یکی از فایلها را جدا کرده و بخوانیم.

MATLAB

clc
clear
close all
%% www.onlinebme.com
listName= dir('*.txt')
for i=1:length(listName)
    name= listName(i).name;
    folder= listName(i).folder;
    filename= [folder,'\',name];
    disp(filename)
    data(:,i)= readmatrix(filename);
end

حالت دوم: فایلهایی که در داخل زیرفولدرهای مسیرجاری قرار گرفته اند

فرض کنید، کد ما در مسیر x قرار گرفته است، و در همان مسیر، چندین زیرفولدر قرار گرفته که فایلهای مدنظر داخل اونها هست، در این صورت از کد زیر استفاده میکنیم و اسم فایلهای داخل اونها رو به شکل زیر با کمک تابع dir متلب میخونیم.

MATLAB

listName= dir('*\*.txt')

معنی کد بالا بدین شکل هست: در همه زیرفلودها، اسم همه فایلهایی که .txt دارند را برگردون.

اگر نمیخواهیم همه زیرفلودرها را بررسی کنیم و فقط یک زیرفولدر خاصی مدنظرمان هست به شکل زیر کد رو مینویسیم.

MATLAB

listName= dir('folderName\*.txt')

کلا اگر بخواهیم در مسیر خاصی دنبال فایلهایی بگردیم، به شکل زیر عمل میکنیم.

MATLAB

listName= dir([Path , ‘\*.txt']);
listName=dir(‘C:\onlinebme\Norizadeh\YouTube\MATLAB\*.txt');

حالت سوم: فایلهایی که در داخل زیرفولدرهای همه زیرفولدرهای مسیرجاری قرار گرفته اند

فرض کنید که در مسیر جاری یک تعداد زیرفولدر هست، و داخل هر کدام هم یک سری زیرفلودر. و فایلهای مدنظر ما داخل اون زیرفلودرها قرار گرفته اند. به صورت زیر میتونیم اسم اونارو بگردونیم.

MATLAB

listName= dir('*\*\*.txt')

 

همین روال رو میتونیم برای همه مسیرها ادامه دهید.


معرفی تابعstrcmp  متلب (مقایسه رشته ها در متلب)

خیلی از مواقع نیاز داریم که در متلب، یک رشته را با چندین رشته دیگر که اندازه یکسانی هم ندارند باهم مقایسه کنیم. برای اینکار از if-else نمیتونیم استفاده کنیم، چرا که در صورت یکسان نبودن کاراکترها خطا میده. از switch case میتونیم استفاده کنیم، ولی اگه تعداد کلمات مقایسه افزایش پیدا کنه تعداد case افزایش پیدا میکنه و یک کد بسیار شلوغ و بی نظمی خواهیم داشت. راه دیگه استفاده از تابعstrcmp  متلب هست. در این ویدیو نحوه کار کردن با تابعstrcmp  متلب رو توضیح مدهیم…


دیدگاه ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

code