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

ادخال بيانات عن طريق ملف txt

بدأه فارس2010 في 7 يناير 2012 · 9 رد · 1,394 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد برنامج ياخذ بيانات رقميه من ملف txt وتحفظها في مصفوفه رقميه علما باني استطيع اخذ البيانات ولكن احفظ كل المكتوب في الملف علي هيئه نصوص

الملف سيكون كالاتي

1*12*131*15*

يعني ياخذ اول رقم ولما يشوف العلامه *

يبقي اول رقم خلص اخد اللي بعده

#2

محاولاتك؟

2
#4

هههه غالبا إنت مخدتش بالك من "حرف الكاف" اللى فى آخر الكلمة :)

1 −1
#5

السلام عليكم

تفضل هذا المثال

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

vector<long int > getDigitValue(const char * fileName);

int main(int argc, char * argv[]){
	vector<long int > value;
	value = getDigitValue("file.txt");
	for(int i = 0; i < value.size(); i++){
    	cout << value << endl;
	}

	return 0;
}

vector<long int > getDigitValue(const char * fileName){
	vector<long> Value;
	string str = "";
	char character = 0;

	fstream file(fileName);

	if(file){
    	while(file.get(character)){
        	if(isdigit(character)){
            	str += character;
        	}
        	else{
            	if(!str.empty()){
                	Value.push_back(atol(str.c_str()));
            	}
            	str = "";
        	}
    	}
    	if(isdigit(character)){
        	Value.push_back(atol(str.c_str()));
    	}
	}
	else{
    	cout << "Couldn't Open the file: " << fileName << endl;
	}

	return Value ;
}
1
#6

شكرا للاخ biginnner 2000وربنا يزيدك علما ولكن كنت اريد كود ابسط قليلا انا مش فاهم هذه الخوارزميه

ممكن شرح او كود اسهل شويه

Blueteeth كتب:

هههه غالبا إنت مخدتش بالك من "حرف الكاف" اللى فى آخر الكلمة :)

من كان يؤمن بالله واليوم الاخر فليقل خيرا او ليصمت ....وكونك مبرمج متميز لا يعطيك حق الاستهزاء بالاخرين

1
#7

اخى فارس تفضل كود اخى بيجانير بعد التعديل:

1-حذف متغير فيكتور واستبدالة بمصفوفة عادية بطول BuffZise.

2-التعليقات على الكود توضحة ان شاء الله ...

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

int main()
{
    int const BUFF_ZISE = 10;
    // مصفوفة لتحمل العناصر من الملف بدﻻ من المتغير منوع فيكتور
    int buff[BUFF_ZISE] = {0} ;
    int Index = 0;
    const char fileName[] = "file.txt";

    string str = "";
    char character = 0;
    // فتح الملف
    fstream file(fileName);
    // اذا تم فتح الملف بنجاح
    if(file)
    {
        // المرور على كل حرف بالملف ثم
        while(file.get(character))
            // اذا كان رقم ضفه الى str
            if(isdigit(character))
                str += character;
            else
            {
                // اذا أمتلئت buff قم بعرض عناصرها
                if(Index > BUFF_ZISE -1)
                {
                    for(int i = 0; i < Index; i++)
                        cout << buff << endl;
                        // تصفير index لكى نبدأ من جديد فى ملء buff
                    Index = 0;
                    cout << " full buffer now try again " << endl; // يمكنك حذف هذا السطر هو للتوضيح فقط .
                }
                if(!str.empty())
                    buff[Index++] = (atoi(str.c_str()));
                str = "";
            }
    }
    else
        cout << "Couldn't Open the file: " << fileName << endl;

    // اذا لم تمتلئ buff حتى  فسوف يتم عرض العناصر المدخلة فيها .
    for(int i = 0; i < Index; i++)
        cout << buff << endl;

    file.close();
    return 0;
}

فلنجرب الكود :

نموذج مدخلات الملف :

1*14*54*54*6*4
7 8 9
2*2*3*4*4444*44

نموذج المخرجات :

auda@nxpc:~/progects c++/RobertLafer/mm/bin/Debug$ ./mm
1
14
54
54
6
4
7
8
9
2
 full buffer now try again 
2
3
4
4444
44
auda@nxpc:~/progects c++/RobertLafer/mm/bin/Debug$

ادعو الله ان يكون هذا ما تبحث عنة وافقنى الله واياك فى الدنيا واﻻخرة

تحياتى العطرة والله الموفق ...

1

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

#8

جزاك الله خيرا كثيرا ونفع بك واسال الله ان يفرج عنك من كرب الدنيا والاخره كما فرجت عني....

#9

السلام عليكم اخي محمد ابوزيد انا جربت الكود وشغال تمام كما اتمني بس في جزء انا مش فاهمه في الكود

ولذلك انا هاقول لحضرتك انا ايه اللي فهمته من الكود علشان تشرحي الباقي اذا سمحت

1بنعمل اولا مصفوفه علشان نخزن فيه الارقام الماخوذه من الملف

2اعملنا متغير اسمه indexواعطيناه قيمه صفر بس المفروض ده عداد علشان ينقاني من عنصر لعنصر في المصفوفه

3عملنا مصفوفه لنخزن فيا اسم الملف

4افتح الملف الموجود به الارقام

لو تم فتح الملف بنجاح

هيمر علي حرف حرف في الملف ويحطه في المتغيرcharacter ويشوف هو رقم فيضعه في المتغير string

5lوفي حاله لم يكن حرف اي بعد اكتمال الرقم الاول مثلا

حضرتك بتعمل شرط داخل فيه index مع ان هذا المتغير لم تتغير قيمته منذ ان اعطيته القيمه صفر في البدايه وحتي عند انتهاء قراءه الرقم الثاني نا الذي سيغير قيمه index

وده كده اول سوال

وكمان انا مش فاهم هذا السطر بيعمل ايه

if(!str.empty())

buff[index++] = (atoi(str.c_str()));

str = "";

}

واكون شاكر لحضرتك لمساعدتي

#10
اقتباس
حضرتك بتعمل شرط داخل فيه index مع ان هذا المتغير لم تتغير قيمته منذ ان اعطيته القيمه صفر في البدايه وحتي عند انتهاء قراءه الرقم الثاني نا الذي سيغير قيمه index

وده كده اول سوال

اذا كنت تقصد هذا الكود:

if(Index > BUFF_ZISE -1)
                {
                    for(int i = 0; i < Index; i++)
                        cout << buff << endl;

نحن لدينا مصفوفة buff بطول 10 ارقام لو لم نضع هذا الشرط وكان عدد العناصر من الملف اكبر من عشرة سوف يحدث buffer overflow

لذلك عندما يتحقق شرط ملئ المصفوفة يطبع العناصر ويجعل قيمة index صفر لكى نبدأ من جديد

انت ممكن تعمل قيمة BUFF_ZISE الى 4000 او 2000 ليس شرطا 10 او 5 للسهولة.

 if(!str.empty())
                    buff[Index++] = (atoi(str.c_str()));
                str = "";

اذا لم تكن str فارغة ضع قيمتها بالمصفوفة بعد تحويل القيمة النصية الى رقم من نوع int بالدالة atoi() هذة الدالة من دوال السي والسي ليس بها نوع بيانات string نعمل لها تحويل لسلسة نصية متوافقة مع السى

وبعد من نضع الرقم فى المصفوفة نعطى المتغير str قيمة فارغة او ﻻشئ ليستعد للرقم التالى ..

تحياتى العطرة والله الموفق ...

1

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

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

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

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

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

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