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

[ تمت الإجابة ]اريد معرفة طريقة قراءة ملف text file

بدأه so0oma في 4 أبريل 2012 · 12 رد · 1,126 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندي سؤال لاهل الخبرة وان شاء الله يكون الموضوع في القسم الصحيح

عندي جهاز لتحضير الموظفين يحدد لي التاريخ وساعة الدخول والخروج

طبعا البيانات راح تنسحب على فلاش ميموري بصيغة text file

ابغى اعرف كيف اقدر اقراء هالبيانات واخزنها في الداتا بيز عشان اقدر اضيف هالمعلومات في صفحة الموظف

ياليت اللي عنده اي معلومة او خبرة ما يقصر ضرررررررررررررررووووري

#2

السلام عليكم

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

وهذا هو الكود :

$FArray = file("filename.txt");

طبعاً السطر الأول سيوضع فى أول عنصر فى المصفوفة والثانى فى الثانى وهكذا

وعلى سبيل المثال سأقوم بتخزين أول سطر فى متغير x سوف يكون الكود كلأتى :

$FArray = file("filename.txt");
$x=$FArray[0];

دمتم بخير

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

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

#3

طيب انا ابغى الكود اللي يحفظها بالداتا بيس

#4

مرحبا بك اخي ..

العملية بسيطة ان شالله وليس بها أي تعقيد ..

لنفرض ان ملف البيانات يحتوي على اسطر، وكل سطر يعني بيانات قراءة الجهاز لتسجيل دخول الموظفين .. وليكن السطر على هذا النحو:

04/04/2012,100,07:30:00

حيث ان السطر يحتوي على التاريخ، رقم الموظف، وقت تسجيل التحضير ..

نبدأ بالعملية:

<?php

// CONNECT TO DATABASE //
$connect = mysql_connect("localhost","user","password");
mysql_select_db("Database", $connect);

// SELECTED DATE //
$date = '04/04/2012';

// TXT FILE PATH //
$file_path = 'data.txt';

// OPEN TXT FILE //
$file = fopen($file_path,'r') or exit();

// READ FILE TO THE END //
while(!feof($file)) {

	// READ THE FILE LINE BY LINE AND SPLIT IT //
	$file_data = explode(',', fgets($file));
	$fdate = $file_data[0];
	$fid = $file_data[1];
	$ftime = $file_data[2];

	// DISPLAY DATA //
	echo '<pre>'. $fdate .' '. $fid .' '. $ftime .'</pre>';

	// INSERT STATEMENT //
	mysql_query("INSERT INTO table_name (date, id, time) VALUES ('$fdate', '$fid', '$ftime')");

}

?>

الكود يقوم بقراءة ملف البيانات سطر بسطر، يقوم بتجزيء السطر عن طريق فصل البيانات بالفاصلة "," ثم يحفظها في مصفوفة، بعد ذلك يقوم بحفظ البيانات في قاعدة البيانات لكل سطر حتى ينتهي من جميع الأسطر ..

ولكن يجب التأكد من ان الصيغة موحدة لجميع الأسطر لكي لايحدث اي تعارض في قراءة البيانات ..

وإن كنت تواجه صعوبة في قراءة صيغة السطر للملف لديك، قم بإدراجه حتى نقوم بمساعدتك ان شاء الله، ولكن حاول ان تعتمد على نفسك، فذلك أفضل لك :wink:

اخوك ,,

#5

راح اجرب وارجع لك اذا فيه اي صعوبة

جزاك الله خير الجزاء

#6

طيب هذا هوا الملف اللي راح اقرا بياناته ..

No	  Mchn	  EnNo		Name		Mode	IOMd	    DateTime	
00001	1	00000111	ac   	    33	0	2012/04/02  17:36:10
00002	1	00000001	a         	33	0	2012/04/02  17:36:10
00003	1	00000111	aaaa     	33	0	2012/04/04  22:43:24
00004	1	00000001	a         	33	0	2012/04/04  22:43:24

وهذا تطبيقي للكود

<?php

// CONNECT TO DATABASE //
$connect = mysql_connect("localhost","root","");
mysql_select_db("att", $connect);

// SELECTED DATE //
$date = '04/04/2012';

// TXT FILE PATH //
$file_path = 'AGL_001.TXT';

// OPEN TXT FILE //
$file = fopen($file_path,'r') or exit();

// READ FILE TO THE END //
while(!feof($file)) {

        // READ THE FILE LINE BY LINE AND SPLIT IT //
        $file_AGL_001 = explode(',', fgets($file));
        $No = $file_AGL_001[0];
        $Mchn = $file_AGL_001[1];
        $EnNo = $file_AGL_001[2];
		$Name = $file_AGL_001[3];
		$Mode = $file_AGL_001[4];
		$IOMd = $file_AGL_001[5];
		$DateTime = $file_AGL_001[6];

        // DISPLAY DATA //
        echo '<pre>'. $No .' '. $Mchn .' '. $EnNo .' '. $Name .' '. $Mode .' '. $IOMd.' '.$DateTime.'</pre>';

        // INSERT STATEMENT //
        mysql_query("INSERT INTO atten(No, Mchn, EnNo,Name,Mode,IOMd,DateTime) VALUES ('$No', '$Mchn', '$EnNo','$Name','$Mode','$IOMd','$DateTime')");

}

?>

بس يظهر لي هذا الخطأ

Notice: Undefined offset: 1 in C:\Program Files (x86)\EasyPHP-5.3.9\www\n\a.php on line 22

#7

مرحبا بك ..

اعتقد ان المشكلة في المصفوفة، لأن صيغة السطر لديك غير مرتبة ولا ينطبق عليها التطبيق الذي قمت بإدراجه لك.

على العموم، هذا الكود بعد التعديل عليه، يقوم بقراءة البيانات المحددة للتاريخ المحدد في المتغير $date ثم يقوم بحفظ البيانات المحددة في قاعدة البيانات ..

<?php

// CONNECT TO DATABASE //
$connect = mysql_connect("localhost","user","password");
mysql_select_db("Database", $connect);

// SELECTED DATE //
$date = '2012/04/02';

// TXT FILE PATH //
$file_path = 'data.txt';

// OPEN TXT FILE //
$file = fopen($file_path,'r') or exit();

// READ FILE TO THE END //
while(!feof($file)) {

	// READ THE FILE LINE BY LINE AND SPLIT IT //
	$file_data = fgets($file);
	$line_string = preg_replace('/\s[\s]+/', '|', $file_data);
	$file_AGL_001 = explode('|', $line_string);
		if($file_AGL_001[6] == $date) {
			$No = $file_AGL_001[0];
			$Mchn = $file_AGL_001[1];
			$EnNo = $file_AGL_001[2];
			$Name = $file_AGL_001[3];
			$Mode = $file_AGL_001[4];
			$IOMd = $file_AGL_001[5];
			$DateTime = $file_AGL_001[6] .' '. $file_AGL_001[7];

			// DISPLAY DATA //
			echo '<pre>No:'. $No .' Mchn:'. $Mchn .' EnNo:'. $EnNo .' Name:'. $Name .' Mode:'. $Mode .' IOMd:'. $IOMd .' DateTime:'. $DateTime .'</pre>';

			// INSERT STATEMENT //
			mysql_query("INSERT INTO table_name (date, id, time) VALUES ('$fdate', '$fid', '$ftime')");
		}

}

?>

يجب ان يكون العرض لديك بهذا الشكل:

No:00001 Mchn:1 EnNo:00000111 Name:ac Mode:33 IOMd:0 DateTime:2012/04/02 17:36:10

اخبرني عن النتيجة ..

اخوك

#8

جربته وطلع لي هذا الخطا

Notice: Undefined offset: 6 in C:\Program Files (x86)\EasyPHP-5.3.9\www\n\b.php on line 23

والمقصود به هذا السطر

 if($file_AGL_001[6] == $date)

وكذلك اريد شرح لهذه الاشياء

$file_data = fgets($file);
        $line_string = preg_replace('/\s[\s]+/', '|', $file_data);
        $file_AGL_001 = explode('|', $line_string);
#9

مرحبا ..

الاسماء التي تندرج تحت خانة الاسم هل يوجد بها فراغات؟

لا اجد سبباً في وجود الاسماء داخل الملف، فرقم الموظف يكفي لقراءة بياناته ..

$file_data = fgets($file);

هذا الكود يقوم بقراءة الملف سطر بسطر، اي انه يتعامل مع السطر كجزء متكامل، لأن هناك دالة اخرى fgetc تتعامل مع الاحرف ..

$line_string = preg_replace('/\s[\s]+/', '|', $file_data);

هذا الكود يقوم بالبحث عن الفراغات في السطر ويستبدلها بهذه الاشارة | لكي يسهل التعامل مع البيانات، بعد تنفيذ هذه العملية ستكون صيغة السطر كالآتي:

00001|1|00000111|ac|33|0|2012/04/02|17:36:10

ثم استخدمنا دالة explode التي تقوم بتوزيع البيانات وتضعها في مصفوفة

$file_AGL_001 = explode('|', $line_string);

لاحظ ان الدالة تقوم بقراءة السطر بعد حذف الفراغات، ثم تقوم بفصل الاجزاء، وهذا المثال للتوضيح:

لو افترضنا ان لدينا هذا السطر:

$string = "mohammed|Khalid";

نقوم بعملية explode للنص:

$exp_string = explode("|", $string);

سيقوم البرنامج بالبحث عن هذا الفاصل | الذي قمنا بتعريفه في عملية explode، ثم سيجعل مادون ذلك في مصفوفة، والنتيجة ستكون لديك كالتالي:

$exp_string[0] = mohammed
$exp_string[1] = Khalid

فهذه هي الفكرة التي قمت بالاعتماد عليها لقراءة البيانات من الملف ..

لذلك اعتقد ان المشكلة لديك هي وجود فراغات في خانة الاسماء، مما يلخبط ترتيب المصفوفة، فإن كان بالامكان ازالة خانة الاسماء والاكتفاء برقم الموظف فذلك افضل ..

اخوك

#10

بالنسبة للاسم ما فيه اي فراغات ..

وبعدين بالنسبة للقراءة انا اهم شي عندي رقم الموظف وتاريخ الحضور والوقت

وباقي المعلومات مو مهمة

الفراغات موجودة في ال mod

33 0

يمكن تكون المشكلة منه ???

انا جربت احذف اللاسم بس المشكلة باقية

تم تعديل هذه المشاركة بواسطة so0oma في 6 أبريل 2012 في 15:15

#11

اهلا بك ..

قم بتشغيل الملفات المرفقة دون تغيير شيء، واخبرني هل تجد نفس الخطأ ام ان بيانات الملف تظهر على المتصفح؟

read.php

data.txt

#12

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

جزيت خيرا اخي للمساعدة

ولكن هل عندك خبرة في هذه الاشياء لكي ارجع لك في اي مشكلة .. ؟

#13

اهلا بك اخي الحبيب، وحياك الله في أي وقت ..

اذا واجهت اي مشكلة فأنا موجود ان شاء الله، وبالامكان مراسلتي على الايميل abo.ghalya@gmail.com

اخوك

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