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

القراءه من txt file

بدأه فارس2010 في 12 أبريل 2012 · 5 رد · 921 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عندي ملف txt

بهذه الصوره

joint

1.00

2.12

3.25

4.23

6.23

1.23

link

1.326

1.2

1.23

حيث ان السطر يحتوي علي رقم واحد فقط اوكلمه

اريد ان احفظ الكلمات في متغير string

الارقام في مصفوفه double

ارجوا الافاده وجزاكم الله خيرا

لا توجد محاولات لاني لا اعرف التعامل مع txt

#2

السلام عليكم

أخى الكريم تفضل هذا الكتاب به كيفية التعامل مع الملفات بلغة السي

رابط تنزيل الكتاب

alshamel-in-c.PDF

وطبعاً لا تنسى أن "0\" تعنى نزول سطر لتتمكن من فصل بيانات الملف لقراءتها صف صف وأيضاً استخدام دوال التحقق للتحقق من نوع البيانات فى كل سطر

1

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

لا إله إلا أنت سبحانك إني كنت من الظالمين

#3

أسهل طريقة استخدام الfstream.h

       char *ss_c;

	  if((ss_c= (char*)malloc(51))==NULL)
	   {
		  return;
	   }

	  ifstream file("d:\\filename.txt",ios::in);

   if(clif==NULL)
	  {
      cout<<"ERROR opening file"<<endl;
	   return 0;
	  }


   memset(ss_c,50,'\0');


   while(!file.eof())
	  {
		 file.getline(ss_c,50,'\n');


	  }

free(ss_c)
file.close()

انتبه ان '\n' يمثل الفاصل بين كل سطر و اخر, يجب ان تعرف ما هو الفاصل لديك فى ملفك, من الممكن ان يكون '\n' او ان يكون '\r' أو كلاهما.

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

float ff=0;

ff=atof(ss_c);

لاختبار الstring و معرفة ما اذا كان رقما ام لا, يمكنك استخدام الدالة isnumeric على الحرف الاول فى السلسلة الحرفية,

if(isnumeric(ss_c[0])
// convert to float
else
//keep it as string.

تم تعديل هذه المشاركة بواسطة فادى_بلس_بلس في 12 أبريل 2012 في 13:10

2
#4

بسم الله الرحمن الرحيم

#include<fstream.h>
#include<iostream.h>
void main()
{
char string[20];
ifstream fromefile("filename.txt");
while(!fromefile.eof())
{
fromefile.getline(string,19);
cout<<string<<endl;
}
}

هذا البرنامج يقرأ محتويات ملف اسمه filename.txt

ويمكنك تغييره إلى أي اسم .. ثم يخزن كل سطر على حدة في مصفوفة ثم يعرضها على الشاشة ثم يخزن السطر التالي وهكذا حتى نهاية الملف..

والسلام عليكم

#5
مصطفى 36a2 كتب:

بسم الله الرحمن الرحيم

هذا البرنامج يقرأ محتويات ملف اسمه filename.txt

ويمكنك تغييره إلى أي اسم .. ثم يخزن كل سطر على حدة في مصفوفة ثم يعرضها على الشاشة ثم يخزن السطر التالي وهكذا حتى نهاية الملف..

والسلام عليكم

اقتباس
أسهل طريقة استخدام الfstream.h

المشكلة ليست فى من جلب البيانات من الملف ووضعها بمتغير نصى المشكله فى أختبار القيمة فى المتغير النصى هل هى نص ووضعه فى مصفوفة نصية. أم هو قيمة رقمية بفاصلة عائمة ووضعة فى مصفوفة من نوعة.

تقبلو مرورى والله ولى التوفيق

تم تعديل هذه المشاركة بواسطة AudaNix في 13 أبريل 2012 في 08:47

1

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#6

تماما جزاك الله خيراً أخي Audanix

إذاً إليك هذه الدالة والحمد لله من تصميمي :

double CTD(char a[],int b=100){
double RD=0;int m=0; 
for(int i=0;i<b;i++){   
	if(a==0){if(m==0)RD/=10;break;} 
	else if(a=='.'){m=1;RD/=10;} 
	else if(m==0)RD=(RD+(a-48))*10; 
	else if(m!=0){RD+=((a-48)/pot(m));m++;}}return RD;} //RD : returned double
//CTD: char to double

هذه الدالة نمرر لها مصفوفة نوع char والتي تحوي أرقام وهي تعيد الرقم الموجود كdouble

واعتماداً على هذه الدالة إليك الرنامج التالي االذي يحقق المطلوب:

#include<fstream.h> 
#include<iostream.h> 
#include<string.h>
//////////////////////////////////
double CTD(char a[],int b=100){
double RD=0;int m=0; 
for(int i=0;i<b;i++){   
	if(a==0){if(m==0)RD/=10;break;} 
	else if(a=='.'){m=1;RD/=10;} 
	else if(m==0)RD=(RD+(a-48))*10; 
	else if(m!=0){RD+=((a-48)/pot(m));m++;}}return RD;} 
//////////////////////////////////
void main() 
{ 
char test[20];//مصفوفة وسيطة تعتبر خطوة مرحلية قبل تخزين الدخل في مكانه  
char word[10][10];//هنا نخزن الكلمات 
double numbers[10]; //هنا نخزن الأرقام 
ifstream fromefile("filename.txt");//إنشاء كائن الإدخال 
for(int i=0,j=0;!fromefile.eof()) 
{ 
//i&j  عدادان الأول للأرقام والثاني للكلمات 
fromefile.getline(test,19);//هنا عملية الإدخال والتخزين في المصفوفة الوسيطة 
if(string[0]<='9') {number=CTD(test,20);i++}//إذا كان الدخل رقما نخزنه كرقم 
else {strcpy(word[j],test);j++}// إذا كان الدخل كلمة نخزنه ككلمة 
} 
//والآن لدينا المصفوفتان word و numbers يحويان الدخل مفرّقا
//يمكننا أن نعالج الدخل كما نريد مثلاً سنعرض الكلمات ثم الأرقام
cout<<"Numbers : "<<endl;
for(int n=0;n<i;n++)
cout<<number[n]<<endl;
/////////
cout<<"Words are :"<<endl;
for(int m=0;m<j;m++)
cout<<word[m]<<endl;
}

أرجو ان يكون المطلوب قد تم :happy: ... والسلام عليكم

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 13 أبريل 2012 في 17:34

1

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…