ياخواني ارجوكم مساعدة بــ fopen


(eslamoo) #1

السلام عليكم

اخواني, كيف الحال وكل عام وانتم بخير

طبعا انا عندي كووود يقوم بأزالة النصوص من ملف txt ويقوم بأنشاء ملف txt جديد يحتوي على الارقام فقط ( بدون نصوص) وهذا البرنامج شغال 100% ولكن فقط لملف واحد … فطلبي هو انه

اريد هذا البرنامج ليكون شغال لاكثر من ملف يعني (Multi txt files)

انا عندي مجموعة كبيرة من ملفات txt تحتوي على نصوص ولااستطيع ازالة النصوص الا بتطوير هذا البرنامج.

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

الكود في المرفقات مع ملف txt واحد


(Ahmed) #2

[CENTER]وعليكم السلام
جرب هذا الكود

clc; clear all; close all;

[MyFilNmes, MyPath, filterindex] = uigetfile( ...
        '*.txt','Select files (*.txt)', ...
        'Select files','MultiSelect', 'on');
    
    if isequal(MyFilNmes,0) || isequal(MyPath,0)
        disp('User pressed cancel');
    else
       % Multiple files
       if iscell(MyFilNmes)
           [m n]=size(MyFilNmes);
           for j=1:n
           fidOriginal=fopen(fullfile(MyPath,MyFilNmes{j}));
           [p NewName ext]=fileparts(fullfile(MyPath,MyFilNmes{j}));
           fidNew=fopen(fullfile(MyPath,strcat(NewName,'_New.txt')),'w');
           while ~feof(fidOriginal) ; 
               tline=fgets(fidOriginal) ;
               if isletter(tline(1))==1 ;
               else
                   fwrite(fidNew,tline) ;
               end
           end
           fclose all ;
           end
       % Single file    
       else
           fidOriginal=fopen(fullfile(MyPath,MyFilNmes));
           [p NewName ext]=fileparts(fullfile(MyPath,MyFilNmes));
           fidNew=fopen(fullfile(MyPath,strcat(NewName,'_New.txt')),'w');
           while ~feof(fidOriginal) ; 
               tline=fgets(fidOriginal) ;
               if isletter(tline(1))==1 ;
               else
                   fwrite(fidNew,tline) ;
               end
           end
           fclose all ;
       end
    end
    

[/center]


(eslamoo) #3

ماشاء الله تبارك الله يااخي DzArticles الكود شغال 100%

بس عندي طلب اضافي بسيط… هل يمكن حفظ الملفات الجديدة في مجلد لوحده بواسطة الكود تبعك ؟

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


(Ahmed) #4

[CENTER]نعم يمكنك اختيار المجلد

clc; clear all; close all;


[MyFilNmes, MyPath, filterindex] = uigetfile( ...
        '*.txt','Select files (*.txt)', ...
        'Select files','MultiSelect', 'on');

    
    if isequal(MyFilNmes,0) || isequal(MyPath,0)
        disp('User pressed cancel');
    else
       % Pick a Folder to save files
       MyFolder=uigetdir(MyPath,'Choose a Folder');
       if MyFolder==0
       % No Folder
       else
          % Multiple files
       if iscell(MyFilNmes)
           [m n]=size(MyFilNmes);
           for j=1:n
           fidOriginal=fopen(fullfile(MyPath,MyFilNmes{j}));
           [p NewName ext]=fileparts(fullfile(MyPath,MyFilNmes{j}));
           fidNew=fopen(fullfile(MyFolder,strcat('\',NewName,'_New.txt')),'w');
           while ~feof(fidOriginal) ; 
               tline=fgets(fidOriginal) ;
               if isletter(tline(1))==1 ;
               else
                   fwrite(fidNew,tline) ;
               end
           end
           fclose all ;
           end
       % Single file    
       else
           fidOriginal=fopen(fullfile(MyPath,MyFilNmes));
           [p NewName ext]=fileparts(fullfile(MyPath,MyFilNmes));
           fidNew=fopen(fullfile(MyFolder,strcat('\',NewName,'_New.txt')),'w');
           while ~feof(fidOriginal) ; 
               tline=fgets(fidOriginal) ;
               if isletter(tline(1))==1 ;
               else
                   fwrite(fidNew,tline) ;
               end
           end
           fclose all ;
       end 
       end
       
    end
    

[/center]


(eslamoo) #5

والله انك مبدع اخي DzArticles … شغال 100% وجزاك الله خيرا وربي يوفقك


(eslamoo) #6

الى الاخ DzArticles الكود شغال 100% ولاكن عن تطبيقه للملفات التى امتلكها … الكود يقود بحذف كل النصوص ولاكن مازاله تبقى عباراتان هما

                                  >>*HEADER*<<
                                    >>*DATA*<< 

في المرفقات هناك ملف txt النوع الذي امتلكه الان


(Ahmed) #7

[CENTER]المشكل ليس في نوع الملف، بل في طريقتك لحذف النصوص

وانا لم اقم بتغيير طريقتك. فقط ادخلتها في لووب

طريقتك تقوم بحذف كل الاسطر التي تبدا بحرف، وتترك البقية
السطر
>>HEADER<<
لا يبدا بحرف. لذلك تتركه

لو اردنا تصحيح بسيط للطريقة
نقوم بنسخ كل سطر يبدا برقم. اي عكس طريقتك

اقول بسيط . لان الطريقة تبقى غير كاملة ومحدودة.
فلو السطر يبدا برقم ويحتوي على حرف في منتصفه ستنسخه في الملف الجديد

التصحيح يكون باستبدال

isletter

واستخدام

isstrprop


الكود يصبح

clc; clear all; close all;


[MyFilNmes, MyPath, filterindex] = uigetfile( ...
        '*.txt','Select files (*.txt)', ...
        'Select files','MultiSelect', 'on');

    
    if isequal(MyFilNmes,0) || isequal(MyPath,0)
        disp('User pressed cancel');
    else
       % Pick a Folder to save files
       MyFolder=uigetdir(MyPath,'Choose a Folder');
       if MyFolder==0
       % No Folder
       else
          % Multiple files
       if iscell(MyFilNmes)
           [m n]=size(MyFilNmes);
           for j=1:n
           fidOriginal=fopen(fullfile(MyPath,MyFilNmes{j}));
           [p NewName ext]=fileparts(fullfile(MyPath,MyFilNmes{j}));
           fidNew=fopen(fullfile(MyFolder,strcat('\',NewName,'_New.txt')),'w');
           while ~feof(fidOriginal) ; 
               tline=fgets(fidOriginal) ;
               if isstrprop(tline(1),'digit')==1 ;
                   fwrite(fidNew,tline) ;
               end
           end
           fclose all ;
           end
       % Single file    
       else
           fidOriginal=fopen(fullfile(MyPath,MyFilNmes));
           [p NewName ext]=fileparts(fullfile(MyPath,MyFilNmes));
           fidNew=fopen(fullfile(MyFolder,strcat('\',NewName,'_New.txt')),'w');
           while ~feof(fidOriginal) ; 
               tline=fgets(fidOriginal) ;
               if isstrprop(tline(1),'digit')==1 ;
                   fwrite(fidNew,tline) ;
               end
           end
           fclose all ;
       end 
       end
       
    end
    

[/center]


(eslamoo) #8

بارك الله فيك اخي الكووووود شغال 100%