ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingถามเกี่ยวกับ php ครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ถามเกี่ยวกับ php ครับ  (อ่าน 1457 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
chuanguru
ก๊วนเสียว
*

พลังน้ำใจ: 10
ออฟไลน์ ออฟไลน์

กระทู้: 337



ดูรายละเอียด
« เมื่อ: 08 กันยายน 2007, 10:08:31 »

คือว่าผมมีไฟล์ .TXT อยู่หนึ่งไฟล์มีการจัดเรียงรูปแบบไฟล์ดังนี้
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999

คือผมอยากแยกแต่ละบรรทัดเอามาใส่ database อ่ะครับ
สมมุติมี field A,B,C
ผมอยากให้ 1111111111 อยู่ใน field A
             2222222222 อยู่ใน field B
             3333333333 อยู่ใน field C

             4444444444 อยู่ใน field A
             5555555555 อยู่ใน field B
             6666666666 อยู่ใน field C

             7777777777 อยู่ใน field A
             8888888888 อยู่ใน field B
            9999999999  อยู่ใน field C

อยากทราบว่าต้องเขียนโปรแกรม php ตัดคำแต่ละบรรทัดจาก text file อย่างไร และวนลูปแต่ะละบรรทัดลงฐานข้อมูลแต่ละ field อย่างไร ครับ
ขอบคุณล่วงหน้าครับที่ช่วยชี้แนะ
บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 08 กันยายน 2007, 11:43:11 »

ผมแนะนำเป็นแนวนะครับ เวลาไม่มี (จะไปเรียนอะ)

$data = rtrim(file("file.txt"));
$i = 1;
foreach($data as $var) {
$new[count($new)][$i-1] = $var;
if($i >= 3) $i = 0;
$i++;
}

print_r($new);

ลองดูละกันนะครับ $new น่าจะอยู่ในรูปที่เอาไปทำเป็นฟิลด์ได้ง่ายแล้วแหละ

เอาไปวนลูปอีกที แล้วแจกลงเป็นบรรทัดเลย เพราะเป็น array ซ้อน
บันทึกการเข้า

Pipo
Newbie
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 99



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 08 กันยายน 2007, 14:28:16 »

วิธีมีเยอะแล้วแต่ความถนัดของผู้เขียนครับ
ผมขอยกอีกตัวอย่างแล้วกันนะครับ

โค๊ด:
<?

$strContents = file("file.txt");

$intI = 1;
foreach ($strContents as $strContent) {
$strContent = trim($strContent);
if ($intI == 1) {
echo "A\t$strContent\n";
}
else if ($intI == 2) {
echo "B\t$strContent\n";
}
else if ($intI == 3) {
echo "C\t$strContent\n";
}

if ($intI == 3) { $intI = 0; }
$intI++;
}

?>
บันทึกการเข้า
chuanguru
ก๊วนเสียว
*

พลังน้ำใจ: 10
ออฟไลน์ ออฟไลน์

กระทู้: 337



ดูรายละเอียด
« ตอบ #3 เมื่อ: 09 กันยายน 2007, 08:05:03 »

ขอบคุณมากครับที่แนะนำ  Kiss
บันทึกการเข้า

payu
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 125
ออฟไลน์ ออฟไลน์

กระทู้: 1,887



ดูรายละเอียด
« ตอบ #4 เมื่อ: 09 กันยายน 2007, 08:16:12 »


ของผมใช้เทคนิค excel ครับ   Smiley

1. เปิดไฟล์ใน excel
2. ใส่สูตร column B1, C1 ให้เป็น A2, A3
3. copy B, C ลงมาทั้งหมดทุกแแถว
4. insert column A
5. ใส่ลำดับที่ column A เว้นทุก 2 บรรทัด = A1=1, A3=2
6. highlight column A1:A5 แล้วใช้ mouse ลากลงมาให้โปรแกรมสร้างลำดับให้
7. copy column B, C ทั้งหมดแล้วไป paste special -> value only ที่ D1
8. ลบ column B,C
9. กด ctrl-a = select all
10. sort ข้อมูลตาม column A
11. ข้อมูลที่นำมาใช้ได้คือ แถวที่ column A มีลำดับครับ

อันนี้น่าจะนำมาใช้แบบครั้งเดียวด่วน ไม่อยากเขียนโปรแกรม ...
แต่ถ้าต้องใช่้หลายครั้งก็น่าจะเขียนเป็นโปรแกรมครับ




« แก้ไขครั้งสุดท้าย: 09 กันยายน 2007, 08:22:56 โดย payu » บันทึกการเข้า

chuanguru
ก๊วนเสียว
*

พลังน้ำใจ: 10
ออฟไลน์ ออฟไลน์

กระทู้: 337



ดูรายละเอียด
« ตอบ #5 เมื่อ: 09 กันยายน 2007, 10:24:11 »

วิธีมีเยอะแล้วแต่ความถนัดของผู้เขียนครับ
ผมขอยกอีกตัวอย่างแล้วกันนะครับ

โค๊ด:
<?

$strContents = file("file.txt");

$intI = 1;
foreach ($strContents as $strContent) {
$strContent = trim($strContent);
if ($intI == 1) {
echo "A\t$strContent\n";
}
else if ($intI == 2) {
echo "B\t$strContent\n";
}
else if ($intI == 3) {
echo "C\t$strContent\n";
}

if ($intI == 3) { $intI = 0; }
$intI++;
}

?>

ขอถามอีกนิดครับคือ code ตัวนี้เวิร์คมากแต่จะนำไป insert ในฐานข้อมูลยังไงครับเพราะมันแยกส่วนเป็นบรรทัดจาก intI=1 intI=2 น่ะครับซึ่งเป็นตัวแปร strContent เดียวกัน ถ้าใช้คำสั่ง insert มันก็จะไม่สามารถทำได้เพราะมันแยกด้วย if อ่ะครับ ... ทำไงดี ช่วยทีครับพี่น้องง
บันทึกการเข้า

chuanguru
ก๊วนเสียว
*

พลังน้ำใจ: 10
ออฟไลน์ ออฟไลน์

กระทู้: 337



ดูรายละเอียด
« ตอบ #6 เมื่อ: 09 กันยายน 2007, 15:33:36 »

ด้วยความพยายามผมทำได้แล้วครับ  Cry
วิธีคือ
ใน if ($intI == 1) { } ข้อมูลในนี้จะเป็นแถวแรก เช่น 11111111
ผมใช้วิธี insert ใน field แรก เข้าไปก่อนปล่อยให้ field ที่ 2 ว่างไว้
แล้วใน else if ($intI == 2) { } ข้อมูลในนี้จะเป็นแถวที่ 2 เช่น 2222222
ผมก็ select record สุดท้ายออกมาแล้ว ใช้วิธี update เอาครับ

โอ พระเจ้ามั่วจนทำได้ ขอบพระคุณทุกท่านที่แนะนำครับ ขอบคุณจริงๆๆ  Kiss
บันทึกการเข้า

Pipo
Newbie
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 99



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 09 กันยายน 2007, 17:18:41 »

จริงๆ ก็ยังงงๆ ว่าจะเอาไปใช้อะไรนะครับ
ถึงเป็น คนละ if ก็รวมเป็น query เดียว insert ครั้งเดียวได้นะครับ

โค๊ด:
<?

$strContents = file("file.txt");

$intI = 1;
foreach ($strContents as $strContent) {
$strContent = trim($strContent);
if ($intI == 1) {
$str1 = "$strContent";
}
else if ($intI == 2) {
$str2 = "$strContent";
}
else if ($intI == 3) {
$str3 = "$strContent";
}

if ($intI == 3) {
echo "INSERT INTO _your_table_ (Field1,Field2,Field3) VALUES ('$str1','$str2','$str3');\n";
$intI = 0;
}
$intI++;
}

?>

แต่ถ้าตัวสุดท้ายไม่เท่ากับ 3 query อาจหายไป 2-3 บรรทัดล่างสุดครับต้องแก้กันอีกที
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์