Qanday Qilib Faylni Satrdan Olib Tashlash Mumkin

Mundarija:

Qanday Qilib Faylni Satrdan Olib Tashlash Mumkin
Qanday Qilib Faylni Satrdan Olib Tashlash Mumkin

Video: Qanday Qilib Faylni Satrdan Olib Tashlash Mumkin

Video: Qanday Qilib Faylni Satrdan Olib Tashlash Mumkin
Video: QANDAY QILIB UCHMAYDIGAN FAYLNI UCHIRISH MUMKIN 2024, Noyabr
Anonim

PHP-da kichik hajmdagi ma'lumotlar bilan ishlashda bazada ma'lumotlar bazasini yaratish va u bilan skriptlarning o'zaro ta'sirini tashkil qilishdan ko'ra ularni fayllarda saqlash osonroq bo'ladi. Bunday hollarda, matnli fayldan belgilangan satrlarni o'chirish vazifasi kam emas. Buning eng oddiy usulini batafsil ko'rib chiqamiz.

PHP: satrni fayldan qanday olib tashlash
PHP: satrni fayldan qanday olib tashlash

Kerakli

PHP haqida asosiy ma'lumotlar

Ko'rsatmalar

1-qadam

Dastlabki ma'lumotlar:

- bizda bir qator ma'lumotlar qatorlarini o'z ichiga olgan allStrings.txt matnli fayli bor

- fayldan No 44 qatorni o'chirish talab qilinadi

Muammoni hal qilish algoritmi quyidagicha bo'ladi: siz faylni ochishingiz, undagi satrlarni qatorlar qatorida o'qishingiz va mavjud faylni massiv mazmuni bilan yozishingiz, o'chirishga mo'ljallangan qatorni o'tkazib yuborishingiz kerak.

2-qadam

Ushbu algoritmni stsenariyda amalga oshirish uchun biz avval o'zgaruvchiga manba faylining nomi va o'chiriladigan satr sonini o'z ichiga olgan qiymatlarni beramiz: $ fileName = "allStrings.txt";

$ lineToKill = 44; Keyin faylni qatorlar qatorida o'qiymiz: $ stringsArray = file ($ fileName); Faylda bizga kerakli satr borligini tekshirib ko'ramiz. Boshqa barcha kodlar faqat $ lineToKill sharti $ stringsArray qatoridagi satrlar sonidan ko'p bo'lmaganda bajariladi: if ($ lineToKill <= count ($ stringsArray)) {

// bu dasturning asosiy tsikli bo'ladi

} Agar shart bajarilmasa, bizda o'chiradigan narsa yo'q. Ssenariy bu haqda ma'lumotli xabarni chop etsin: else echo "Fayldagi satrlar soni". "$ LineToKill."! "Dan kam; Agar shart bajarilsa, siz yangi yozuv uchun manba faylini tozalashingiz kerak: $ fileHandle = fopen ($ fileName, "w"); Endi biz satr qatorining barcha elementlari bo'ylab takrorlanadigan tsiklni tashkil qilishimiz kerak. Ammo qator indeksatsiyasi noldan boshlangani uchun va biz o'chirish uchun satr raqamini bittadan sanadik, u holda tsikl boshlanishidan oldin ham har qadamda ushbu amal takrorlanmasligi uchun $ lineToKill qiymatini bittaga kamaytiramiz: $ lineToKill -; Loopni tashkil qilish uchun: foreach ($ stringsArray as $ key => $ value) {

// bu erda tsiklning har bir qadamining kodi

} $ Kalit o'zgaruvchisi qatordagi joriy satr indeksini va $ value o'zgaruvchisi ushbu satr qiymatini o'z ichiga oladi. Tsiklning har bir bosqichida biz massivdagi chiziq indeksini o'chiriladigan raqam bilan taqqoslaymiz va agar ular mos kelmasa, biz ushbu satrning qiymatini faylga yozamiz: if ($ key! = $ LineToKill) fwrite ($ fileHandle, $ value); A agar ular mos keladigan bo'lsa, biz faylga yozmaymiz, ammo muvaffaqiyatli o'chirilganligi to'g'risida xabar chop etamiz: aks holda "Line". $ LineToKill. "O'chirildi."; Va tsikl oxirida faylga yozish tugagach, uni xushmuomalalik bilan yopish kerak: fclose ($ fileHandle);

3-qadam

To'liq kod quyidagicha ko'rinadi: <? Php $ fileName = "allStrings.txt";

$ lineToKill = 44; $ stringsArray = fayl ($ fileName);

agar ($ lineToKill <= count ($ stringsArray)) {

$ fileHandle = fopen ($ fileName, "w");

$ lineToKill--;

foreach ($ stringsArray as $ key => $ value) {

if ($ key! = $ lineToKill) fwrite ($ fileHandle, $ value);

else echo "Line". $ lineToKill. "o'chirilgan.";

}

fclose ($ fileHandle);

}?> Albatta, bu eng sodda kod, unda real sharoitda ssenariyni ishlashi paytida yuzaga kelishi mumkin bo'lgan barcha asoratlardan himoya qilinmaydi. Masalan, agar fayl juda ko'p satrlarni o'z ichiga olsa, ularni qatorga o'qish server manbalaridan bitta skript uchun juda katta miqdordagi qismni tishlaydi. Albatta, katta hajmdagi ma'lumotlar bilan ishlash matnli fayllar emas, ma'lumotlar bazalari orqali tashkil etilishi kerak. Ammo shunga qaramay, ta'lim namunasi sifatida biz ushbu muammoni hal qiladigan kodni beramiz. Bu erda algoritm oldingisidan farq qiladi: massivda juda ko'p satrlarni saqlamaslik uchun, ssenariy birin-ketin manba faylidan o'qiydi va ularni vaqtincha faylga birma-bir yozadi. Ushbu jarayon oxirida asl fayl o'chiriladi va vaqtinchalik fayl joyiga ko'chiriladi.

4-qadam

Ushbu skript avvalgisiga o'xshash tarzda boshlanadi:

$ fileName = "allStrings.txt";

$ lineToKill = 44;

Keyin ishlash uchun vaqtinchalik fayl yaratishingiz kerak. Buni "tmp" papkasida bajaramiz va vaqtinchalik faylga bir xil prefiksni beramiz: $ tempFile = tempnam ("/ tmp", "tmp"); Endi o'qish uchun manba faylni ochishga harakat qilaylik: if ($ fileHandle = @fopen ($ fileName, "rb")) {

// manba fayl normal ochilganda ushbu kod bajariladi

} Agar bu bajarilmasa - skriptni keyingi ishlashi mantiqqa to'g'ri kelmasa, biz tegishli xabarni berish bilan jarayonni o'ldiramiz: else die ("Dastlabki fayl mavjud emas!"); Agar fayl odatdagidek ochilgan bo'lsa, biz bu haqda xabarnoma chiqaradi va tegishli xabar bilan avval yaratilgan vaqtinchalik faylni ochishga harakat qiladi: echo "Manba fayli mavjud";

if ($ tempHandle = fopen ($ tempFile, "w")) echo "Vaqtinchalik fayl yaratildi."; Endi manba faylidan satrlarni o'qish tsiklini boshlash vaqti keldi, u tugaguniga qadar davom etadi. fayl: while (! feof ($ fileHandle)) {

// bu erda joriy satr bilan ishlash uchun kod bo'ladi

} Davrning har bir qadamida biz bitta qatorni o'qiymiz: $ lineToWrite = fgets ($ fileHandle); Agar bu o'chiriladigan satr bo'lmasa, uni vaqtinchalik faylga yozing. $ LineNum qator hisoblagichi to'g'ridan-to'g'ri taqqoslash operatsiyasida ko'paytiriladi: if ($ lineToKill! = (++ $ lineNum)) fwrite ($ tempHandle, $ lineToWrite); satrlar tugashi bilan faylni yoping: fclose ($ fileHandle));

fclose ($ tempHandle); Nihoyat, temp faylini asl nusxasiga o'zgartiring. Agar bu operatsiya muvaffaqiyatli bo'lsa, biz tegishli xabarni beramiz: if (rename ($ tempFile, $ fileName)) echo "$ lineToKill liniyasi o'chirildi";

5-qadam

To'liq kod:

<? php $ fileName = "allStrings.txt";

$ lineToKill = 44; $ tempFile = tempnam ("/ tmp", "tmp");

agar ($ fileHandle = @fopen ($ fileName, "rb")) {

echo "Manba fayli mavjud";

if ($ tempHandle = fopen ($ tempFile, "w")) echo "Vaqtinchalik fayl yaratildi.";

}

else die ("Manba fayli mavjud emas!"); while (! feof ($ fileHandle)) {

$ lineToWrite = fgets ($ fileHandle);

agar ($ lineToKill! = (++ $ lineNum)) fwrite ($ tempHandle, $ lineToWrite);

} fclose ($ fileHandle);

fclose ($ tempHandle);

if (rename ($ tempFile, $ fileName)) echo "Line $ lineToKill olib tashlandi";?>

Tavsiya: