Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > รบกวนด้วยครับ การเขียนโปรแกรมรับค่าตัวเลขและสุ่มบันทึกในไฟล์ .txt



 

รบกวนด้วยครับ การเขียนโปรแกรมรับค่าตัวเลขและสุ่มบันทึกในไฟล์ .txt

 



Topic : 096356



โพสกระทู้ ( 18 )
บทความ ( 0 )



สถานะออฟไลน์




รับค่าตัวเลข n เป็นพารามิเตอร์นำเข้า แล้วให้โปรแกรมสุ่มตัวเลขตั้งแต่ 1 ถึง n แต่ค่าของตัวเลขจะไม่เรียงลำดับใด ๆ แล้วเก็บลงแฟ้มข้อความ data.txt โดยเก็บค่าตัวเลข ค่าละ 1 บรรทัด

เวลารันออกมาครับ

3
5
10
9
2
8
4
1
7
6

ประมาณนี้ครับ



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-06-10 11:38:27 By : atthaphon View : 2422 Reply : 8
 

 

No. 1



โพสกระทู้ ( 3,843 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

ใจจริงแล้วไม่ได้อยากทำสคริปต์ให้น่ะครับ หวังว่าคุณจะเอาไปนั่งคิดต่อให้เข้าใจ
Code (PHP)
<?php
$file_handle = fopen("mytext.txt", "w");  // สร้าง mytext.txt เอาไว้ด้วย
$max = 10;  //  จำนวน n
$min = 1;
$r = array();  //  สร้าง array ไว้เก็บค่า random

while(count($r)<$max){  //  วนลูปจนกว่าจำนวนค่าใน array จะเท่ากับ $max หรือ n
	$rand = mt_rand($min,$max);
	if(!in_array($rand,$r)){  // เช็คก่อนว่ามีค่านี้ใน array รึยัง ถ้ายังถึงจะทำเงื่อนไขนี้

		              $r[] = $rand;  //  เก็บค่า random ลง array

	              	fwrite($file_handle, $rand."\n"); // เขียนลงไฟล์ ขึ้นบรรทัดใหม่ด้วย
	}
}
?>


ตัวอย่างผลลัพธ์
Code
9 5 7 4 2 1 10 3 6 8









ประวัติการแก้ไข
2013-06-10 22:42:21
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-10 22:39:15 By : mangkunzo
 


 

No. 2



โพสกระทู้ ( 18 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 14:56:37 By : atthaphon
 

 

No. 3

Guest


ขอบคุณครับ กำลังจะถามโจทย์แบบนี้พอดีเลย
แต่ผมลองเอาโค้ดพี่ไปทำดู มันช้ามากครับเวลากำหนดจำนวน n เยอะๆ
ผมลอง 10000 นี่ประมาณ 30 วิ ยิ่ง 100000 นี่มัน error เลยครับ
ทำไมถึงเป็นอย่างนั้น

Code (PHP)
<?php
$file_handle = fopen("mytext.txt", "w");  // สร้าง mytext.txt เอาไว้ด้วย
$max = 10000;  //  จำนวน n
$min = 1;
$r = array();  //  สร้าง array ไว้เก็บค่า random

while(count($r)<$max){  //  วนลูปจนกว่าจำนวนค่าใน array จะเท่ากับ $max หรือ n
	$rand = mt_rand($min,$max);
	if(!in_array($rand,$r)){  // เช็คก่อนว่ามีค่านี้ใน array รึยัง ถ้ายังถึงจะทำเงื่อนไขนี้

		              $r[] = $rand;  //  เก็บค่า random ลง array

	              	fwrite($file_handle, $rand."\n"); // เขียนลงไฟล์ ขึ้นบรรทัดใหม่ด้วย
	}
}
?>


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 19:26:09 By : เอริค
 


 

No. 4



โพสกระทู้ ( 3,843 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 3 เขียนโดย : เอริค เมื่อวันที่ 2013-06-12 19:26:09
รายละเอียดของการตอบ ::
มันเป็นแนวคิดครับ เรื่อง performance ต้องไปหาวิธีปรับเอาเองครับ
และที่มัน error เพราะ php มัน time out ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 19:44:35 By : mangkunzo
 


 

No. 5

Guest


ไม่มีแนวคิดที่ดีกว่านี้เหรอครับ code นี้ช้ามากเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 20:48:13 By : เอริค
 


 

No. 6



โพสกระทู้ ( 3,843 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 5 เขียนโดย : เอริค เมื่อวันที่ 2013-06-12 20:48:13
รายละเอียดของการตอบ ::
ส่วนตัวผมคิดว่า ทั้ง rand ทั้งเขียน text ได้แค่นี้ก็ดีแล้ว

แต่....ถ้าดูดีๆ โจทย์ที่ถามไม่ได้ต่างอะไรไปจากการสับไพ่เฉยๆ
ดังนั้น ทำแบบนี้เลยครับ
Code (PHP)
ini_set('memory_limit', '1024M'); // เพิ่ม memory ครับ เพราะ array ใหญ่มาก

$file_handle = fopen("mytext.txt", "w");
$max = 1000000;
$min = 1;
$r = array();
while($min <= $max){
	$r[] = $min; $min++;
}
shuffle($r);  // สับไพ่ไปเลย อิอิ
fwrite($file_handle, implode("\r\n",$r));  // ใชเ้เวลาไป 1.92 s ครับ
echo 'Success';




ประวัติการแก้ไข
2013-06-12 22:45:00
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-12 22:44:13 By : mangkunzo
 


 

No. 7



โพสกระทู้ ( 18 )
บทความ ( 0 )



สถานะออฟไลน์


ผมเอาไปปรับมาแล้วครับ

Code (PHP)
<?php
$n=$_REQUEST['n'];
if(empty($n)){
echo "
	<form method=\"post\" action=\"?\">
	<input type=\"text\" name=\"n\"><input type=\"submit\">
	</form>
	";
}else{
	header("Content-Type: plain/text");
	header("Content-Disposition: Attachment; filename=data$n.txt");
	header("Pragma: no-cache");
	$arr="";
	for($i=1;$i<=$n;$i++){
		 if(empty($arr)) $arr[]=$i;
		 else $arr[].=$i;
	}
	shuffle($arr);
	foreach ($arr as $number) {
		echo "$number \r\n";
	}
}
?>



ประวัติการแก้ไข
2013-06-14 14:26:15
2013-06-14 14:26:57
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-14 14:25:07 By : atthaphon
 


 

No. 8



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ปรับทำไมครับ ของเดิมเขาทำงานเร็วอยู่แล้ว

แบบนี้ช้าลงมาก เพราะไปตรวจเงื่อนไขที่ไม่จำเป็น
for($i=1;$i<=$n;$i++){
    if(empty($arr)) $arr[]=$i;
    else $arr[].=$i;
}


ไม่ควรใช้ foreach นะครับ ใช้ implode() แบบที่เขาเึขียนตัวอย่างไว้มันเร็วกว่ามากครับ

echo ออกไปเลย
echo implode("\r\n",$arr); 


จริงๆ แล้ว PHP มีฟังก์ชั่นสร้างตัวเลขต่อเนื่องนะครับ ชื่อว่า range()

ตามโจทย์ในตอนแรก สามารถเขียนให้เหลือแค่นี้ได้
<?php
$v = range(1, 100000);
shuffle($v);
file_put_contents('data.txt', implode("\n", $v));

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-06-14 14:38:50 By : cookiephp
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนด้วยครับ การเขียนโปรแกรมรับค่าตัวเลขและสุ่มบันทึกในไฟล์ .txt
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่