fopen text ไฟล์ขึ้นมาแล้วแก้ไข text ไฟล์ ด้วย Function อะไรครับ

   
fopen text ไฟล์ขึ้นมาแล้วแก้ไข text ไฟล์แต่ละ record ด้วย Function อะไรครับ
abc
13 ก.พ. 46 เวลา 15:37:37 น. --> 203.170.128.44,
   
   
Text ไฟล์มี Record ด้วยหรือครับ ความรู้ใหม่
---
13 ก.พ. 46 เวลา 15:46:15 น. --> 202.182.5.53, w
  
   
จำไม่ได้แน่นอนนะครับแต่ลองไปดู HELPคำสั่ง
FOPEN( ) ,FREAD( ), FWRITE( ) , FGET( ), FPUT( ), FSEEK( ) แล้วดู Sample คงพอเป็น แนวทาง ให้คุณได้...

Text File อาจจัดเก็บข้อมูลในลักษณะ Fixed length Record (มีความยาวคงที ) หรือ Variable length Record ก็ได้ (เช่น Record Delimitted with Special Character ) ครับ
เดาสุ่ม
13 ก.พ. 46 เวลา 17:14:50 น. --> 210.203.179.201
  
   
>fopen text ไฟล์ขึ้นมาแล้ว
fopen เสร็จแล้ว คุณ abc ทำอะไรต่อจากนั้นล่ะครับ การเปิดไฟล์นั้น ไม่ได้เปิดแล้วจะแก้ไขได้ทันทีนะครับ คงจะเข้าใจตรงกัน
>แก้ไข text ไฟล์แต่ละ record ด้วย Function อะไรครับ
fread() จะส่งค่ากลับมาเป็น character ก็แก้ไขได้เลยครับ ไม่มีฟังก์ชั่นพิเศษอะไรสำหรับแก้ไขหรอกครับ
knight2000
14 ก.พ. 46 เวลา 1:16:19 น. --> 203.107.144.172
  
   
ผมเปิดมาเพื่อจะเพิ่ม record เข้าไปครับ แต่พอผม fputs() หรือ fwrite() เข้าไป จะเป็นการ create ใหม่ครับ คือ ลบ record เดิมออกหมดเลยครับ
abc
14 ก.พ. 46 เวลา 10:24:33 น. --> 203.170.141.149
  
   
เป็นการ Create ใหม่ หรือ เขียนทับ Record เก่า ? กันแน่ครับ

Record เดิมของคุณ มีกี่ Records คุณเพิ่มไปกี่ Records
ถ้าของเดิมมีอยู่ 2 คุณเขียนเพิ่ม 10
ถ้าเป็นอย่งที่ว่านี้ละก็ สาเหตุมาจาก :คุณลืม move file pointer ไปยังจุดสิ้นสุดของแฟ้มก่อน FPUTS( )

แต่ถ้าไม่ใช่ผมยังนึกสาเหตุไม่ออกครับ...
x86
14 ก.พ. 46 เวลา 11:56:00 น. --> 210.203.179.174
  
   
คุณ abc ใช่คนเดียวกันกับ คุณ abc ที่เป็น IT Manager หรือเปล่าครับ
---
14 ก.พ. 46 เวลา 14:03:31 น. --> 202.182.5.76, w
  
   
ใน text file คงทำแบบนั้นไม่ได้หรอกครับ นอกจาก...
1.คุณ design logic ในการเข้าถึง record เอง
2.จัดการข้อมูลให้ดีก่อน แล้ว write ลง file ไปใหม่
123
16 ก.พ. 46 เวลา 0:00:19 น. --> 202.44.130.122,
  
   
เอาห้วนๆ นะครับ
Fh = FCreate('c:\test.txt')
=FPUTS(Fh, '1111')
=FPUTS(Fh, '2222')
=FClose(Fh)
Fh = FOpen('c:\test.txt', 2) && for read write
? FSeek(Fh, 0,2) && 2 rec = 2 x (4+2) = 12

- - replace/over write
? FSeek(Fh, 6, 0) && ไปที่ต้น rec 2
? FPuts(Fh, '4444') && เขียน rec 3
1111
3333
2222
- - append
? FSeek(Fh, 0, 2) && to eof
? FPuts(Fh, '4444')
1111
3333
2222
4444
======
สำหรับ insert ให้สร้าง file ใหม่ (fNew)
เปิด file เก่า (fOrg) เรื่มที่ beginning of file

อ่านจาก fOrg เขียนไป fNew จนถึงจุดที่ต้องการ
เขียนไป fNew จนหมดที่ต้องการแทรก
อ่านจาก fOrg เขียนไป fNew จนถึง end of file

fNew = FCreate('c:\new.txt')
fOrg = FOpen('c:\test.txt')
... ใช้ loop หรือวิธีตรวจ rec อื่นที่เหมาะ
FOR I = 1 TO 2 && เขียนไป 2 rec
= FPuts(fNew, FGets(fOrg))
ENDFOR
= FPUTS(fNew, 'AAAA') && แทรก rec ใหม่ที่นี่
DO WHILE not FEof(fOrg) && เขียนต่อที่เหลือ
= FPuts(fNew, FGets(fOrg))
ENDDO && จนจบ file
=FClose(fOrg)
=FClose(fNew)

1111
3333
AAAA
2222
4444
เสร็จแล้ว rename c:\test.txt -> test.bak, c:\new.txt -> test.txt
...
16 ก.พ. 46 เวลา 11:38:02 น. --> 202.28.179.1, w
  
   
อุ๊บ! ผิดพลาดที่ตัวอย่าง ต้องเริ่ม 3 record ครับไม่ใช่ 2
ขอยกเลิกข้างบน เอาอันนี้แทนครับ ### แหะๆ ขออภัยครับ

Fh = FCreate('c:\test.txt')
=FPUTS(Fh, '1111')
=FPUTS(Fh, '2222')
=FPUTS(Fh, '3333')
=FClose(Fh)
Fh = FOpen('c:\test.txt', 2) && for read write
? FSeek(Fh, 0,2) && 3 rec = 3 x (4+2) = 18

- - replace/over write
? FSeek(Fh, 6, 0) && ไปที่ต้น rec 2
? FPuts(Fh, '4444') && เขียน rec 4
1111
4444
3333
- - append
? FSeek(Fh, 0, 2) && to eof
? FPuts(Fh, '5555')
1111
4444
3333
5555
======
สำหรับ insert ให้สร้าง file ใหม่ (fNew)
เปิด file เก่า (fOrg) เรื่มที่ beginning of file

อ่านจาก fOrg เขียนไป fNew จนถึงจุดที่ต้องการ
เขียนไป fNew จนหมดที่ต้องการแทรก
อ่านจาก fOrg เขียนไป fNew จนถึง end of file

fNew = FCreate('c:\new.txt')
fOrg = FOpen('c:\test.txt')
... ใช้ loop หรือวิธีตรวจ rec อื่นที่เหมาะ
FOR I = 1 TO 2 && เขียนไป 2 rec
= FPuts(fNew, FGets(fOrg))
ENDFOR
= FPUTS(fNew, 'AAAA') && แทรก rec ใหม่ที่นี่
DO WHILE not FEof(fOrg) && เขียนต่อที่เหลือ
= FPuts(fNew, FGets(fOrg))
ENDDO && จนจบ file
=FClose(fOrg)
=FClose(fNew)

1111
4444
AAAA
3333
5555
เสร็จแล้ว rename c:\test.txt -> test.bak, c:\new.txt -> test.txt
...
16 ก.พ. 46 เวลา 11:51:37 น. --> 202.28.179.1, w
  
   
ขอบคุณครับ
abc
18 ก.พ. 46 เวลา 8:22:00 น. --> 203.170.128.95,
  
ขอเชิญร่วมตอบคำถามครับ
 
ผู้ตอบ :
รหัสผ่าน :
รูปภาพ :
คำตอบ :