انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
روش استفاده از یک قسمت از هر خط ، در فایل متنی وارد شده در متلب؟؟؟

روش استفاده از یک قسمت از هر خط ، در فایل متنی وارد شده در متلب؟؟؟

#2
سلام دوست عزیز.
خیلی ممنون. 
راه حل این نوع مسائل، استفاده از دستور strtok می باشد. دستور strtok ، بر اساس علامت یا عبارتی که مشخص می کنیم، رشته (string) را به دو قسمت remain (باقیمانده) و token (آنچه بر اساس آن علامت، از رشته جدا می کنیم) تقسیم می کند.
من کدهایی را به شما ارائه می دهم، اگر متوجه نحوه عملکرد و منطق آنها نشدید، علامت ; را از انتهای کدها بردارید تا متوجه شوید که مرحله به مرحله چه اتفاقی می افتد.
فایل شما دارای نام a.txt است که در آن، اطلاعات زیر وجود دارد (به عنوان مثال، تنها 4 خط را قرار داده اید) :

کد:
<ONTOPIC topicid=55001 level=YES docno=APE20030803.0000.0096 fileid=20030803_0000_0737_APW_ENG comments="none">
<ONTOPIC topicid=55001 level=YES docno=AFE20030801.1207.0511 fileid=20030801_1207_1405_AFP_ENG comments="none">
<ONTOPIC topicid=55001 level=YES docno=APE20030723.1524.0665 fileid=20030723_1524_1719_APW_ENG comments="none">
<ONTOPIC topicid=55001 level=YES docno=NYT20030726.0000.0005 fileid=20030726_0000_2356_NYT_ENG comments="none">
<ONTOPIC topicid=55001 level=YES docno=XIE20030801.1700.0247 fileid=20030801_1700_1900_XIN_ENG comments="none">

در پوشه حاوی این فایل، یک m-file ساخته و کدهای آن را اینگونه می نویسیم :

کد:
clear all
close all
clc

fid = fopen('a.txt');
A = textscan(fid, '%s', 'delimiter', '\n');
number_of_lines = 4;
for Line_Number=1:number_of_lines
    Line_Information = A{1}{Line_Number};
    [token, remain] = strtok(Line_Information, '=');
    for nn=1:3
        [token, remain] = strtok(remain, '=');
    end
    [token, remain] = strtok(token, 'fileid');
    this_line = strcat('docno=',token);
    disp(this_line);
end

نتیجه اجرای کد متلب بالا :

کد:
docno=APE20030803.0000.0096
docno=AFE20030801.1207.0511
docno=APE20030723.1524.0665
docno=NYT20030726.0000.0005

خروجی به همان صورت است که شما خواستید و در صورت تمایل، می توانید آن را در یک فایل جدید ذخیره کنید یا اینکه در یک متغیر ذخیره کنید (در کد بالا، تنها تک تک خط ها را در خروجی متلب نمایش داده ایم).
من ابتدا عبارت docno را برای تقسیم رشته به دو قسمت انتخاب کردم، اما متوجه شدم که دستور strtok برای آن درست عمل نمی کند، بنابراین در 4 مرحله، علامت = را به عنوان علامت جداکننده (delimiter) در نظر گرفتم و بعد هم عبارت fileid را در نظر گرفتم. در چند مرحله اول، از remain استفاده کرده ایم و در مرحله آخر، از token (منظورم قسمت هایی است که اطلاعات مورد نظر ما در آنها قرار می گیرد).
اگر تعداد خط های فایل a.txt را تغییر دادید (مثلا 1000 خط)، باید متغیر number_of_lines را برابر همان تعداد قرار بدهید.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط Fahrenheit


پیام‌های این موضوع
RE: روش استفاده از یک قسمت از هر خط ، در فایل متنی وارد شده در متلب؟؟؟ - توسط admin - ۱۳۹۳/۰۷/۰۴, ۱۱:۱۰ ق.ظ

پرش به انجمن:


کاربران در حال بازدید این موضوع: 2 مهمان