طبعا انا عندي كووود يقوم بأزالة النصوص من ملف txt ويقوم بأنشاء ملف txt جديد يحتوي على الارقام فقط ( بدون نصوص) وهذا البرنامج شغال 100% ولكن فقط لملف واحد … فطلبي هو انه
اريد هذا البرنامج ليكون شغال لاكثر من ملف يعني (Multi txt files)
انا عندي مجموعة كبيرة من ملفات txt تحتوي على نصوص ولااستطيع ازالة النصوص الا بتطوير هذا البرنامج.
حاولت ان استخدم اللوووب for لاكن فشلت … فممكن احد يساعدي بتطوير هذا الكود … محتاج لمساعدة الله يوفقكم
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
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]المشكل ليس في نوع الملف، بل في طريقتك لحذف النصوص
وانا لم اقم بتغيير طريقتك. فقط ادخلتها في لووب
طريقتك تقوم بحذف كل الاسطر التي تبدا بحرف، وتترك البقية
السطر
>>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