مساعده في كود


(اوريكا) #1

السلااااااااااااااااااام عليكم ورحمه الله

أنا عندي ملفين نصيين وابغى من الماتلاب يقرأ لي السطر الأ ول من الملف الأول والسطر الأول من الملف الثاني ويعمل مقارنه اذا كان هذا السطر يساوي هذا أكمل القراءه وإذا لم يكونا متساااويين أخرج من جمله التكرار وأنا سويت كذا


fid1 = fopen('John_Doe_2007-08-20.txt');
fid2 = fopen('FK_2008-01-16.txt');


tline1 = fgetl(fid1);
tline2 = fgetl(fid2);
while ischar(tline1)

disp(tline1);
tline1 = fgetl(fid1);
while ischar(tline2)

disp(tline2);
tline2 = fgetl(fid2);

if tline1==tline2
return
text=strcat('The max matching percentage is 100% ');
msgbox(text);
else
text=strcat('nooooo matching at all ');
msgbox(text);
end


end

end

وجربت معاها break و continue لكن ماطلعت لي الصح

وإذا وضعت القراءه للملفين داخل while وحده يخرج لي بعد كل سطر يقراه الرسااله فيخرج لي كم هاااااائل من الرسائل…

أرجو المساعده ولكم الشكر


(اوريكا) #2

ويييييييييين المبرمجين المميزين؟؟؟ الله يجزاكم خيييييييييير أنا في أمسسسس الحاجه

يعني أقدر أحط while داخل while أو لا يمكن؟وكيف أخليه يطلع من التكرار إذا لم يتم التطااااابق؟؟؟؟


(ايجيبت) #3

انت عاوز الماتلاب يقارن السطر الاول في الملف الاول بالسطر الاول بالملف التاني فقط
ولا كذلك السطر التاني والثالث وهكذا

ولو قصدك السطر الاول بس
فاذا كانوا متساويين يكمل قراءه الملف الاول ولا التاني
عذرا فانا لم افهم سؤالك جيدا


(اوريكا) #4

الا أبغاه يكمل المقارنه أيضا في السطر الثاني والثالث وهكذا ثم عند الإنتهاء من المقارنه وكانت تطابق يخرج لي رساله بالتطابق

وان كان لايوجد تطابق بأي سطر يخرج لي مباشره من اللوب ويخرج لي رساله بعدم التطابق…
والله يعطيك العافيه ايجيبت


(ايجيبت) #5


clear
clc

fid1 = fopen('John_Doe_2007-08-20.txt');
fid2 = fopen('FK_2008-01-16.txt');

d=1;
i=1;
while d(i)==1
    i=i+1;
    tline1 = fgetl(fid1);
    tline2 = fgetl(fid2);
    
    d(i)=strcmp(tline1,tline2);
    if d(i)==1
        disp(tline1)
  
        if tline1=='.'
            disp('The max matching percentage is 100% ')
       break
        
        else
         
        end
        
        
    elseif d(i)==0
        l=length(d);
        if l==2
            disp('nooooo matching at all ')
        else
            disp(['the no matching condition occurs in the line number ' num2str(l-1)])
        end
    else
        
    end
end



جرب كده وان شاء الله يكون اللي انت عاوزه ولو ليك اي استفسار في الكود اتفضل

(ايجيبت) #6

ATTENTION

[B]لابد من وضع[SIZE=4]

[/size] full stop
في الملفين الاول والثاني في اخر سطر للدلاله علي نهايه الكتابه
[/b]


(اوريكا) #7

الله يعطييييييييك الف الف عافيه ايجيبت لكن ماطلع معي نتيجه وحطيتها بm file يطلع لي
warning found>>>>
The variable ‘d appears to change size on every loop treation (within ascript) . consider preallocating for speed’’


(اوريكا) #8

عذرا ايجيبت لكن الfull ftop أحطها عند نهايه كل سطر أو أخر سطر فقط

على العموم جربت كل الأثنييين ماطلع نتيجه

وجزاك عني المولى كل خير وأدخلك الفردووس الأعلى ووالديك


(ايجيبت) #9

[SIZE=3][COLOR=Blue]الملفات في المرفقات

انا بشتغل بماتلاب R2010-a
[/color][/size]


(اوريكا) #10

اهلاااااااااااا وسهلا ايجيبت

اللهم جازه بالحسنات احسانا وبالذنب عفوا وغفرانا

يامهندس ياقدع ظبطت معايا جزاك الهادي كل خير وبركه

لكن اذا مافيه ازعاج ولا احراج ممكن تشرح لي اللي سويت وكيف اسندت فععععلا تمييز
نفع الله بك الإسلام والمسلمين ونهض عنك كل هم وحزن


(ايجيبت) #11


clear
clc

1-fid1 = fopen('John_Doe_2007-08-20.txt');
2-fid2 = fopen('FK_2008-01-16.txt');

3-d=1;
4-i=1;
5- while d(i)==1
   6- i=i+1;
    7-tline1 = fgetl(fid1);
    8-tline2 = fgetl(fid2);
    
    9-d(i)=strcmp(tline1,tline2);
    10-if d(i)==1
       11- disp(tline1)
  
        12-if tline1=='.'
            13-disp('The max matching percentage is 100% ')
       14-break
        
        15-else
         
       16- end
        
        
    17-elseif d(i)==0
       18- l=length(d);
        19-if l==2
           20- disp('nooooo matching at all ')
        21-else
           22- disp(['the no matching condition occurs in the line number ' num2str(l-1)])
23        end
  24-  else
        
    25-end
26-end  



(ايجيبت) #12

[SIZE=4][COLOR=Black]السطور 1 .و 2 ناقلهم من الكود بتاعك
السطور 3 و 4 دول بعرف فيهم قيم هستخدمها جوه اللوب ودي طريقه متعارف عليها خاصه في ال while لوب عشان تحدد امتي هتبدا وامتي هتقف

بالنسبه لل i فبردو دي طريقه متعارف عليها لعمل counter يلف بحيث مع كل لفه يزود قيمه ال i واحد زي مهو واضح في السطر 6

السطر 7 و 8 من الكود بتاعك و هو بيقرا السطر الاول من الملف وعن اعاده ادخال نفس الامر يقرا السطر التاني وهكذا

السطر التاسع الامر ده بيستخدم عند مقارنه string مع بعضهم والناتج بيبقي 1 عند التماثل و 0 عند الاختلاف

السطر 10 ده شرط اظهار الناتج ان يكون السطر في الملفيين متماثل
السطر 11 من الكود بتاعك وهو اظهار السطر المتماثل
السطر ال 12 ده شرط انتهاء الملف ان يكون الملفين متماثلين في اخر سطر ويكون اخر سطر هو . للدلاله علي انتهاء الكتابه

السطر 13 هو اظهار كمال التماثل في حال تحقق الشرطين السابقين
السطر ال 14 لايقاف قراءه باقي السطور في حال تحقق الشروط السابقه

السطر 17 هو شرط ان يكون السطور غير متماثله وده ممكن يحدث اما في بدايه البرنامج كما في السطر 19 او بصفه عامه كما في السطر 21

السطر 18 يقيس عدد السطور التي تم قرائتها قبل حدوث عدم التماثل
السطر 20 ده ناتج عدم التماثل منذ البدايه
السطر 22 ده لتحديد عدم التماثل حدث في السطر رقم كام

بالتوفيق
[/color][/size]


(اوريكا) #13

الله يعطيك ألف ألف عاافيه ويوفقك ويوصلك مبتغاك من غير ضراء ولا فتنه

الف شكر على الشرح الوافي…

بغيت أسأل عن طريقه أخرى وهي هل يمكن أني أقارن بين الملف الأول والثاني ثم يخرج لي نتيجه التطابق على هيئه نسبه مئوية؟؟
يعني يقول لي نسبه التطابق 77% …أو 2% بالميه وهكذا وعند عدم وجود أي تطابق يقول نووو ماتش وعند التطابق التام يقول 100%

والله يجازيك عني كل خييير ويرزقك من حيث لاتحتسب


(المهندس سعود) #14

الله يجزيك الخير

مشكوووووووووووووووووووووووووووووووور


(اوريكا) #15

الله يعطيك ألف ألف عاافيه ويوفقك ويوصلك مبتغاك من غير ضراء ولا فتنه

الف شكر على الشرح الوافي…

بغيت أسأل عن طريقه أخرى وهي هل يمكن أني أقارن بين الملف الأول والثاني ثم يخرج لي نتيجه التطابق على هيئه نسبه مئوية؟؟
يعني يقول لي نسبه التطابق 77% …أو 2% بالميه وهكذا وعند عدم وجود أي تطابق يقول نووو ماتش وعند التطابق التام يقول 100%

والله يجازيك عني كل خييير ويرزقك من حيث لاتحتسب

وأيضا بالنسبه للمقارنه الأولى أريد وضعها في function تدخل لي بمتغيرات عباره عن الملف الأول والثاني

ثم يقوم بقراتهما لكن يخرج لي مشكله…

function matchings(file1,file2)
clear
clc



fid1 = fopen(file1);
fid2 = fopen(file2);

d=1;
i=1;
while d(i)==1

والمشكله هي

Error in ==> matchings at 8
fid1 = fopen(file1);
أتمنى المساعده وجزاكم الله كل خير وبركات


(اوريكا) #16

بغيت أسأل عن طريقه أخرى وهي هل يمكن أني أقارن بين الملف الأول والثاني ثم يخرج لي نتيجه التطابق على هيئه نسبه مئوية؟؟
يعني يقول لي نسبه التطابق 77% …أو 2% بالميه وهكذا وعند عدم وجود أي تطابق يقول نووو ماتش وعند التطابق التام يقول 100%

والله يجازيك عني كل خييير ويرزقك من حيث لاتحتسب

مثل هذي الطريقه


percent_match = max_percent(1,1)*100/minuNum1;

%if function is called in GUI mode, popup out the message box
%for final result
if nargin == 3
text=strcat('The max matching percentage is ',num2str(percent_match),'%');
msgbox(text);
end;


(ايجيبت) #17

[LEFT]

الاضافه هي معرفه عدد سطور الملف الاول قبل بدايه المقارنه وبعد ذلك اتمام نفس
الكود السابق


clear
clc

file1=('John_Doe_2007-08-20.txt');
file2=('FK_2008-01-16.txt');

fid = fopen(file1,'rt');
nLines = 0;
while (fgets(fid) ~= -1),
    nLines = nLines+1;
end
% fclose(fid);

fid1 = fopen(file1);
fid2 = fopen(file2);


d=1;
i=1;
while d(i)==1
    i=i+1;
    tline1 = fgetl(fid1);
    tline2 = fgetl(fid2);
    
    d(i)=strcmp(tline1,tline2);
    if d(i)==1
        disp(tline1)
        
        if tline1=='.'
            disp('....................................')
            disp('The max matching percentage is 100% ')
            disp('....................................')
            break
            
        else
            
        end
        
    elseif d(i)==0
        l=length(d);
        if l==2
            
            disp('.......................')
            disp('nooooo matching at all ')
            disp('.......................')
        else
            disp('.....................................................')
            disp(['the no matching condition occurs in the line number ' num2str(l-1)])
            disp('.....................................................')
            disp(['the matching percentage is ' num2str(round(100*(l-2)/(nLines) )) ' %' ])
        disp('................................')
        end
    else
        
    end
end


[/left]


(ايجيبت) #18

[SIZE=4][COLOR=Blue]لجعلها

FUNCTION
يصبح الكود هكذا[/color][/size]


function matchings(file1,file2)

fid = fopen(file1,'rt');
nLines = 0;
while (fgets(fid) ~= -1),
    nLines = nLines+1;
end
% fclose(fid);

fid1 = fopen(file1);
fid2 = fopen(file2);


d=1;
i=1;
while d(i)==1
    i=i+1;
    tline1 = fgetl(fid1);
    tline2 = fgetl(fid2);
    
    d(i)=strcmp(tline1,tline2);
    if d(i)==1
        disp(tline1)
        
        if tline1=='.'
            disp('....................................')
            disp('The max matching percentage is 100% ')
            disp('....................................')
            break
            
        else
            
        end
        
    elseif d(i)==0
        l=length(d);
        if l==2
            
            disp('.......................')
            disp('nooooo matching at all ')
            disp('.......................')
        else
            disp('.....................................................')
            disp(['the no matching condition occurs in the line number ' num2str(l-1)])
            disp('.....................................................')
            disp(['the matching percentage is ' num2str(round(100*(l-2)/(nLines) )) ' %' ])
            disp('................................')
        end
    else
        
    end
end
end


[RIGHT][SIZE=4]ويكتب الامر في Matlab command window هكذا

[/size][LEFT]


matchings('John_Doe_2007-08-20.txt','FK_2008-01-16.txt')

[/right]
[CENTER]الملفات بالمرفقات[COLOR=Green]

[/color]

بالتوفيق

[/center]
[/left]

(اوريكا) #19

جزاك الله ألف ألف خير أخي ايجيبت وجعل مثواك تحت عرش الرحمن ووالديك

فعلا طريقه رائعه لكن جرب واستخدم هذه المقارنه بين ملفيين متساويين
وانظر للناتج …

أخرج لي هكذا


the no matching condition occurs in the line number 62

the matching percentage is 100 %

واسفييين على الازعاج اتعبتك معاي


(ايجيبت) #20

وضعت ال . في السطر الاخير من الملفين؟