مساعدة عاجلة بالماتلاب بخصوص التعديل علي Multi txt files


(eslamoo) #1

السلام عليكم
كيف الحال

انا عندي مجموعة من ملفات txt files كل ملف يحتوي علي مصفوفة بأبعاد مختلفة. اريد من الماتلاب ان يقرا جميع الملفات ويقوم بحدف الصفوف الزائدة بالنسبة لاقل بعد.

مثلا لو عندي ملفات بابعاد مختلفة علي سبيل المتال
الملف الاول 5 اعمدة و 7 صفوف
الملف التاني 5 لعمدة و 10 صفوف
الملف التالت 5 اعمدة و 15 صف
الملف الرابع 5 اعمدة و 20 صف
الملف الخامس 5 اعمدة و12 صف

كما تلاحظ ان الاعمدة متساوية لكل ملف ولاكن الصفوف مختلفة. والذي اريده هو الغاء كل الصفوف الزائدة عن اقل بعد وهو 5 اعمدة و7 صفوف
لنحصل علي الملفات النهائية بابعاد متساوية وهي 5 اعمدة و7 صفوف

ارجو ان اكون وضحت الفكرة… وشكرا


(Ahmed) #2

[CENTER]وعليكم السلام

عندك امثلة للملفات ؟

[/center]


(eslamoo) #3

السلام عليكم

ارفقت عدد 4 ملفات كمتال


(Ahmed) #4

[CENTER]طبعا هناك العديد من الطرق
اسهلها

clc; clear all; close all;

MyC=5;
MyR=4;

[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 to save files');
       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}));
           A = fscanf(fidOriginal, '%i', [MyR,MyC]);
           A=A';
           dlmwrite(fullfile(MyFolder,strcat('\',NewName,'_New.txt')), A, ' ')
           fclose all ;
           end
       % Single file    
       else
           fidOriginal=fopen(fullfile(MyPath,MyFilNmes));
           [p NewName ext]=fileparts(fullfile(MyPath,MyFilNmes));
           A = fscanf(fidOriginal, '%i', [MyR,MyC]);
           A=A';
           dlmwrite(fullfile(MyFolder,strcat('\',NewName,'_New.txt')), A, ' ')
           fclose all ;
       end 
       end
       
    end
    

لما تتغير فورمة المعطيات في الملفات لا تنسى تغييرها في الكود

[/center]


(eslamoo) #5

السلام عليكم

الكود شغال بس كل البيانات في الملفات الجديدة تخرج في صف واحد فقط لماذا ؟ انا اريدها مرتبة كما هي في 4 اعمدة و 5 صفوف لكل ملف

شكرا


(Ahmed) #6

الظاهر لم تعطيني امثلة حقيقية

لما تتغير فورمة المعطيات في الملفات لا تنسى تغييرها في الكود


(eslamoo) #7

السلام عليكم

اخي DzArticles شكرا علي مجهودك الاكثر من رائع

الملفات التي معي عبارة عن 12 ملف (text files ) وكل ملف يحتوي على مصفوفة تتكون من 20 عمود و 59902 صف يعني حجم كل ملف يساوي 8.5 ميقابايت والحجم الكلي للملفات 12*8.5 … هذا الحجم لا استطيع رفعه علي المنتدى… وبالتالي انا اعطيتك متال فقط لملفات تتكون من مصفوفات بسيطة.

لم افهم ماذا تقصد بقولك " الظاهر لم تعطيني امثلة حقيقية"

بالنسبة لكودك المرفق هو شغال لاكن النتاحج النهائية تخرج بصف واحد فقط…

ارجو اني قد اوضحت اليك مااعنيه.

وشكرا


(Ahmed) #8

[CENTER]المشكل ليس في حجم البيانات بل في نوعها

هل هي اعداد حقيقية ؟ طبيعية؟ بالفاصلة ؟

لما تتعامل مع الملفات النصية. عند الكتابة عليها يجب ان تاخذ هذا بعين الاعتبار

اعطني مثال صغير عن الملفات 5 او 6 اسطر لكن بمعطيات حقيقية

[/center]


(eslamoo) #9

السلام عليكم

اخي DzArticles

لقد ارفقت اليك اربع ملفات. متساوية في الاعمدة " 20 عمود" ولاكن تختلف في الصفوف.

ارجو اني اوضحتلك وارفقت لك كل ماتريد


(Ahmed) #10

[CENTER]وعليكم السلام

جرب هذا

clc; clear all; close all;
MyR=4;

[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 to save files');
       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');
           for l=1:MyR
           MyLine= fgets(fidOriginal);
           fprintf(fidNew, sprintf('%s', MyLine));
           end
           fclose all ;
           end
       % Single file    
       else
           A=[];
           fidOriginal=fopen(fullfile(MyPath,MyFilNmes));
           [p NewName ext]=fileparts(fullfile(MyPath,MyFilNmes));
           fidNew=fopen(fullfile(MyFolder,strcat('\',NewName,'_New.txt')),'w');
           for l=1:MyR
           MyLine= fgets(fidOriginal);
           fprintf(fidNew, sprintf('%s', MyLine));
           end
           fclose all ;
       end 
       end
       
    end

[/center]


(eslamoo) #11

الكود شغال

بارك الله فيك اخي


(Ahmed) #12

وفيك بارك
العفو