الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال.. قراءة الملفات

بدأه amin_mu123 في 27 أغسطس 2008 · 17 رد · 1,328 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

السؤال هو....

لو فرضنا أنه يوجد لدينا مجموعه من الملفات التكست 20 ملف او 30 او حتى 100 من الملفات كل ملف يحتوى على اعداد صحيحه وتم تسمية الملفات كالتالى

1.txt

2.txt

3.txt

4.txt

وهكذا

وبالطبع جميع الملفات موجوده فى مجلد واحد

نريد عمل برنامج يقوم بقراءه هذه الملفات تباعا وجمع جميع القيم الصحيحه الموجوده بها واظهار الناتج النهائى ...

وأى توضيح تريدوه ؟msn_smiley.png اتفضلوا اسألوا

ملحوظه: يجب ان يسأل البرنامج المستخدم اولا عن عدد الملفات التى يريد جمع القيم الموجوده بها

بالتوفيق....

تم تعديل هذه المشاركة بواسطة amin_mu123 في 27 أغسطس 2008 في 18:48

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#2

اهلين اخي , واشتقنا لك كثيرا , منذ زمن لم نرى لك مواضيع في القسم .

مرحبا بك .

البرنامج سهل جدا , لكن لم افهم هل المقصود هو مساعدتك في ايجاد الحل ام انه سؤال موجه للموجودين ؟

على العموم حياك الله اخي بكلتا الفكرتين.

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#3

شكرا لك يا أخى الكريم

بل السؤال موجه للجميع

وشكرا لك

تم تعديل هذه المشاركة بواسطة amin_mu123 في 27 أغسطس 2008 في 21:43

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#4

اهلا اخي , اعتذر عن تأخري في الرد

انا عن نفسي اقترح عمل دالة تحتوي على حلقة تكرار من 1 إلى عدد الملفات المدخل , وبعد ذلك نعرف متغير sum للجمع .

بعدها نقوم بقراءة الملفات بالمسار ( i.txt) ونقرأ العدد وفي كل مرة نضيف الرقم إلى sum.

هذه فكرتي البسيطة :blush:

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#5

شكرا لك أخى الكريم

بارك الله فيك

وهذه احدى المحاولات


#include <fstream>
#include<conio.h>
#include <string>
using namespace std;

int main()
{
int a,i=0,num=49;
int sum=0;
int num_of_files;
cout<<" Enter number of files : ";
cin>>num_of_files;
ifstream *read;
string name,extension,full_name;
extension=".txt";
for (int j=0;j<num_of_files;j++)
{
name=num+j;
full_name=name+extension;
read=new ifstream(full_name.c_str());

while (*read>>a)
{
sum+=a;
}
delete read;
}
cout<<" the sum is : "<<sum<<endl;
getch();
return 0;
}
#include <iostream>

فهل هناك أفكار أخرى

:wacko:

تم تعديل هذه المشاركة بواسطة amin_mu123 في 28 أغسطس 2008 في 17:00

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#6

السلام عليكم

حياك الله يامين

هذه طريقه أخرى

  1.  
  2. #include <iostream>
  3. #include <fstream>
  4. #include<cstdlib>
  5. #include<cstring>
  6. using namespace std;
  7.  
  8. int main () {
  9. int n,resum=0,t=0;
  10. char filename[20];
  11. ifstream myfile;
  12. cout<<"Enter the number of files n=";
  13. cin>>n;
  14. for(int i=1;i<=n;i++)
  15. {
  16. itoa(i,filename,10);
  17. strcat(filename,".txt");
  18.  
  19. ifstream myfile (filename);
  20. if (myfile.is_open())
  21. {
  22. while (! myfile.eof() )
  23. {
  24.  
  25. myfile>>t;
  26. resum+=t;
  27. t=0;
  28. }
  29. myfile.close();
  30. memset(filename,'\0',20);
  31. }
  32.  
  33. }
  34. cout<<resum<<endl;
  35. cin.get();
  36. cin.get();
  37. return 0;
  38. }
  39.  
  40.  

tvquran_6.gif

#7

أخى الكريم فهد حياك الله

البرنامج لا يقرأ الملفات

وكأنه يدخل فى لووب لا نهائى

وشكرا لك على مشاركتك

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#8

نعم ربما استخدمت أنت امر النسخ في الاعلى فهو لا ينسخ علامه الجمع تاكد من علامت الجمع الموجوده في اللوب؟

tvquran_6.gif

#9

فعلا عندما نسخت لم تكن موجوده

ولكنى أضفتها وأيضا نفس المشكله

أعتقد ان المشكله فى كائن القراءه

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#10

لقد نفذته على كمبايلر dev و vc 2008 ونجح.

تأكد من الكود المنسوخ جيدا.

tvquran_6.gif

#11

تمام أخى الحين اشتغل كانت هناك علامة + أخرى غير موجوده.....

طيب لماذا هذه الطريقه فى عرض الكود ؟

وشكرا لك حل رائع

:clapping:

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#12

ايش ايش ايش , تخلوني يوم اروح وكل واحد يطلع افكاره ها ؟ :angry:

طيب هذي محاولتي , وهي نفس محاولة الاخ امين والي هي نفس فكرتي اساسا , لكن هالمرة بدون اعطائه عدد الملفات , هو يقوم بايجاد جميع الملفات التي تنتهي بـ txt :blush:

#include <string>
#include <iostream>

#include <windows.h>
#include <conio.h>

#include <fstream>
using namespace std; 


int CountFiles(const std::string &refcstrRootDirectory,
			   const std::string &refcstrExtension,
			   bool			  bSubdirectories = true)
{
  int			 iCount		  = 0;
  std::string	 strFilePath;		  
  std::string	 strPattern;		  
  std::string	 strExtension;		 
  HANDLE		  hFile;				
  WIN32_FIND_DATA FileInformation;	  


  strPattern = refcstrRootDirectory + "\\*.*";
  hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
  if(hFile != INVALID_HANDLE_VALUE)
  {
	do
	{
	  if(FileInformation.cFileName[0] != '.')
	  {
		strFilePath.erase();
		strFilePath = refcstrRootDirectory +
					  "\\" +
					  FileInformation.cFileName;

		if(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
		  if(bSubdirectories)
		  {

			int iRC = CountFiles(strFilePath,
								 refcstrExtension,
								 bSubdirectories);
			if(iRC != -1)
			  iCount += iRC;
			else
			  return -1;
		  }
		}
		else
		{
		  strExtension = FileInformation.cFileName;
		  strExtension = strExtension.substr(strExtension.rfind(".") + 1);

		  if((refcstrExtension == "*") ||
			 (strExtension == refcstrExtension))
		  {
			++iCount;
		  }
		}
	  }
	} while(::FindNextFile(hFile, &FileInformation) == TRUE);

	::FindClose(hFile);
  }

  return iCount;
}


int main()
{
  int iNumberOfFiles = 0;

  iNumberOfFiles = CountFiles("c:/a", "txt");


// By amin

  int a,i=0,num=49;
  int sum=0;

  ifstream *read;
  string name,extension,full_name;
  extension=".txt";
  for (int j=0;j<iNumberOfFiles;j++)
   {
	   name=num+j;	 
		full_name="c:/a/"+name+extension;
		 read=new ifstream(full_name.c_str());

	 while (*read>>a)
		{
			sum+=a;
		}
		delete read;
		}
   cout<<" the sum is : "<<sum<<endl;






  _getch();

  return 0;
}

يالله ابغى الي بعدي يفكر كيف يطلع الارقام من الملف اذا كان يحتوي على احرف ايضا :wink:

تحياتي . . .

تم تعديل هذه المشاركة بواسطة time1 في 28 أغسطس 2008 في 17:38

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#13

المهم لا تقطعنا من اسئلتك الحلوه.

ننتظر جديدك.

tvquran_6.gif

#14

السلام عليكم

هذا تعديل اذا كان هناك حروف أو كلمات فى الملفات


#include <fstream>
#include<conio.h>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
string sn;
int a;
int i=0,num=49;
int sum=0;
int num_of_files;
cout<<" Enter number of files : ";
cin>>num_of_files;
ifstream *read;
string name,extension,full_name;
extension=".txt";
for (int j=0;j<num_of_files;j++)
{
name=num+j;
full_name=name+extension;
read=new ifstream(full_name.c_str());

while (*read>>sn)
{
a=atoi(sn.c_str());
sum+=a;
}
delete read;
}
cout<<" the sum is : "<<sum<<endl;
getch();
return 0;
}
#include <iostream>

ما رأيك فى التعديل أخى تايم 1

وهناك تعديل آخر اذا كانت الحروف والأرقام متتاليه

أى لا يوجد بينها مسافات

قريبا اضعه ان شاء الله

تم تعديل هذه المشاركة بواسطة amin_mu123 في 28 أغسطس 2008 في 18:07

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#15

نوب :happy:

اقصد اذا كان احد الملفات يحتوي على الجملة التالية :

"aaafff46ree"

اريده ان يستخلص الرقم 46 من هذه الجملة ,

يالله شغل مخك وطلع مواهبك , الحل جدا بسيط :happy:

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#16

تفضل أخى الكود

أرجوا ابداء رأيك


#include <fstream>
#include<conio.h>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
string sn="",sn1;
int a;
int i=0,num=49;
int sum=0;
int num_of_files;
cout<<" Enter number of files : ";
cin>>num_of_files;
ifstream *read;
string name,extension,full_name;
extension=".txt";
for (int j=0;j<num_of_files;j++)
{
name=num+j;
full_name=name+extension;
read=new ifstream(full_name.c_str());

while (*read>>sn1)
{
for (i=0;i<sn1.length();i++)
{
if(isdigit(sn1)) sn+=sn1;
}

a=atoi(sn.c_str());
sum+=a;
sn="";
}
delete read;
}
cout<<" the sum is : "<<sum<<endl;
getch();
return 0;
}
#include <iostream>

:D

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#17

أحسنت أمين عملك ممتاز.

tvquran_6.gif

#18

رائع اخي وتستاهل احلى شكر كمان :happy:

الحين صار عندنا كود يقوم بقراءة جميع الملفات من نوع txt الموجودة في اي مجلد , وقراءة الارقام داخلها واستخلاص الارقام اذا كانت داخل سلسلة نصية وجمعها واخراج الناتج .

#include <string>
#include <iostream>

#include <windows.h>
#include <conio.h>

#include <fstream>
#include <cstdlib>
using namespace std; 


int CountFiles(const std::string &refcstrRootDirectory,
			   const std::string &refcstrExtension,
			   bool			  bSubdirectories = true)
{
  int			 iCount		  = 0;
  std::string	 strFilePath;		  
  std::string	 strPattern;		  
  std::string	 strExtension;		 
  HANDLE		  hFile;				
  WIN32_FIND_DATA FileInformation;	  


  strPattern = refcstrRootDirectory + "\\*.*";
  hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
  if(hFile != INVALID_HANDLE_VALUE)
  {
	do
	{
	  if(FileInformation.cFileName[0] != '.')
	  {
		strFilePath.erase();
		strFilePath = refcstrRootDirectory +
					  "\\" +
					  FileInformation.cFileName;

		if(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
		  if(bSubdirectories)
		  {

			int iRC = CountFiles(strFilePath,
								 refcstrExtension,
								 bSubdirectories);
			if(iRC != -1)
			  iCount += iRC;
			else
			  return -1;
		  }
		}
		else
		{
		  strExtension = FileInformation.cFileName;
		  strExtension = strExtension.substr(strExtension.rfind(".") + 1);

		  if((refcstrExtension == "*") ||
			 (strExtension == refcstrExtension))
		  {
			++iCount;
		  }
		}
	  }
	} while(::FindNextFile(hFile, &FileInformation) == TRUE);

	::FindClose(hFile);
  }

  return iCount;
}


int main()
{
  int iNumberOfFiles = 0;

  iNumberOfFiles = CountFiles("c:/a", "txt");


// By amin
	 string sn="",sn1;
	 int a;
	 int i=0,num=49;
	 int sum=0;


	 ifstream *read;
	 string name,extension,full_name;
	 extension=".txt";
	 for (int j=0;j<iNumberOfFiles;j++)
	 {
	 name=num+j;	 
	 full_name="c:/a/"+name+extension;
	  read=new ifstream(full_name.c_str());

	 while (*read>>sn1)
	 {
		 for (i=0;i<sn1.length();i++)
		 {
			 if(isdigit(sn1)) sn+=sn1;	 
		 }

		 a=atoi(sn.c_str());
		 sum+=a;
		 sn="";
	 }
	 delete read;
	 }
	 cout<<" the sum is : "<<sum<<endl;
	 getch();
	return 0; 
}

شايف الفكرة كيف كانت وكيف صارت :happy:

وفقك الله لما يحبه ويرضى ...

تقبل تحياتي .. . .

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

مواضيع مشابهة