Ինչպես հեռացնել տողը ֆայլից

Բովանդակություն:

Ինչպես հեռացնել տողը ֆայլից
Ինչպես հեռացնել տողը ֆայլից

Video: Ինչպես հեռացնել տողը ֆայլից

Video: Ինչպես հեռացնել տողը ֆայլից
Video: Следки спицами БЕЗ ШВА. Узор СОВА. Подробный мастер класс. МК ДЛЯ НАЧИНАЮЩИХ. 2024, Նոյեմբեր
Anonim

PHP- ում փոքր քանակությամբ տվյալների հետ աշխատելիս երբեմն ավելի հեշտ է դրանք ֆայլերում պահել, քան տվյալների բազա ստեղծել և դրա հետ սցենարների փոխազդեցություն կազմակերպել: Նման դեպքերում տեքստային ֆայլից նշված տողերը ջնջելու խնդիրը հազվադեպ չէ: Եկեք ավելի սերտ նայենք դա անելու հնարավոր ամենապարզ եղանակին:

PHP. Ինչպես հեռացնել տողը ֆայլից
PHP. Ինչպես հեռացնել տողը ֆայլից

Անհրաժեշտ է

PHP- ի հիմնական գիտելիքներ

Հրահանգներ

Քայլ 1

Նախնական տվյալներ.

- մենք ունենք allStrings.txt տեքստային ֆայլ, որը պարունակում է մի շարք տվյալների տողեր

- պահանջվում է ֆայլից ջնջել թիվ 44 տողը

Խնդրի լուծման ալգորիթմը կլինի հետևյալը. Անհրաժեշտ է բացել ֆայլը, կարդալ դրա մեջ պարունակվող տողերը տողերի շարքում և գոյություն ունեցող ֆայլը վերաշարադրել զանգվածի պարունակությամբ ՝ շրջանցելով ջնջվող տողը:

Քայլ 2

Այս ալգորիթմը սցենարում իրականացնելու համար մենք նախ արժեքներ ենք հատկացնում փոփոխականներին, որոնք պարունակում են աղբյուրի ֆայլի անվանումը և ջնջվող տողի համարը. $ FileName = "allStrings.txt";

$ lineToKill = 44; Ապա եկեք կարդանք ֆայլը տողերի զանգվածում. $ stringsArray = ֆայլ ($ fileName); Եկեք ստուգենք, արդյոք ֆայլը պարունակում է մեզ անհրաժեշտ տող: Հետագա բոլոր ծածկագրերը կկատարվեն միայն այն դեպքում, եթե $ lineToKill պայմանը ոչ ավելի է, քան $ stringsArray զանգվածի տողերի քանակը. If ($ lineToKill <= count ($ stringsArray)) {

// սա կլինի ծրագրի հիմնական օղակը

} Եթե պայմանը չի բավարարվում, ապա մենք ջնջելու բան չունենք: Թող սցենարը տեղեկատվական հաղորդագրություն տպի այս մասին. Հակառակ դեպքում արձագանքեք "Ֆայլում տողերի քանակը պակաս է". $ LineToKill. "!": Եթե պայմանը բավարարված է, դուք պետք է մաքրեք աղբյուրի ֆայլը նոր գրառման համար ՝ $ fileHandle = fopen ($ fileName, "w"); Այժմ մենք պետք է կազմակերպենք մի օղակ, որը կրկնվում է լարային զանգվածի բոլոր տարրերի վրա: Բայց քանի որ զանգվածի ինդեքսավորումը սկսվում է զրոյից, և մենք հաշվել ենք տողի համարը մեկից ջնջելու համար, ապա նույնիսկ օղակի մեկնարկից առաջ մենք մեկով կնվազեցնենք $ lineToKill արժեքը, որպեսզի այս գործողությունը չկրկնվի ամեն քայլափոխի. $ lineToKill -; Օղակ կազմակերպելու համար. foreach ($ stringsArray as $ key => $ value) {

// ահա օղակի յուրաքանչյուր քայլի կոդը

} $ Ստեղնային փոփոխականը պարունակում է զանգվածում ընթացիկ տողի ինդեքս, իսկ $ value փոփոխականը `այս տողի արժեք: Օղակի յուրաքանչյուր քայլին մենք համեմատելու ենք զանգվածի տողի ինդեքսը ջնջվող համարի հետ, և եթե դրանք չեն համընկնում, ապա այս տողի արժեքը ֆայլում կգրենք ՝ if ($ key! = $ LineToKill) fwrite ($ fileHandle, $ value); Ա եթե դրանք համընկնում են, ապա մենք ֆայլին չենք գրելու, բայց հաջող ջնջման մասին հաղորդագրություն ենք տպելու. Else echo "Line". $ LineToKill. "Ջնջված է"; և theիկլի վերջում, երբ ֆայլում գրությունն ավարտված է, պետք է քաղաքավարիորեն փակել այն. fclose ($ fileHandle);

Քայլ 3

Ամբողջական կոդն այսպիսի տեսք կունենա. <? Php $ fileName = "allStrings.txt";

$ lineToKill = 44; $ stringsArray = ֆայլ ($ fileName);

եթե ($ lineToKill <= հաշվել ($ stringsArray)) {

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

$ lineToKill--;

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

եթե ($ ստեղն! = $ lineToKill) գրեք ($ fileHandle, $ արժեք);

other echo "Line". $ lineToKill. "ջնջված է";

}

fclose ($ fileHandle);

}?> Իհարկե, սա ամենապարզ ծածկագիրն է, որում իրական պաշտպանություն չկա բոլոր բարդություններից, որոնք կարող են տեղի ունենալ սցենարի աշխատանքի ընթացքում: Օրինակ, եթե ֆայլը պարունակում է հսկայական քանակությամբ տողեր, ապա դրանք զանգված ընտրելով կկտտացնի սերվերի ռեսուրսներից անթույլատրելիորեն մեծ մի կտոր: Իհարկե, մեծ քանակությամբ տվյալների հետ աշխատանքը պետք է կազմակերպվի տվյալների բազաների, այլ ոչ թե տեքստային ֆայլերի միջոցով: Բայց, այնուամենայնիվ, որպես կրթական օրինակ, մենք կտանք մի ծածկագիր, որը լուծում է նաև այս խնդիրը: Այստեղ ալգորիթմը կտարբերվի նախորդից. Զանգվածում հսկայական քանակությամբ տողեր չպահելու համար սցենարը միանգամից մեկ տող կկարդա աղբյուրի ֆայլից և դրանք մեկ առ մեկ կգրարկի ժամանակավոր ֆայլին: Այս գործընթացի ավարտին բնօրինակ ֆայլը կջնջվի, իսկ ժամանակավոր ֆայլը կտեղափոխվի իր տեղը:

Քայլ 4

Այս սցենարը կսկսվի այնպես, ինչպես նախորդը.

$ fileName = "allStrings.txt";

$ lineToKill = 44;

Դրանից հետո աշխատելու համար հարկավոր է ստեղծել ժամանակավոր ֆայլ: Եկեք անենք դա «tmp» պանակում և նույն նախածանցը տանք ժամանակավոր ֆայլին. $ TempFile = tempnam ("/ tmp", "tmp"); Հիմա եկեք փորձենք բացել աղբյուրի ֆայլը ընթերցման համար. If ($ fileHandle = @fopen ($ fileName, "rb")) {

// այս կոդը կկատարվի աղբյուրի ֆայլը նորմալ բացելու դեպքում

} Եթե դա ձախողվի, սցենարի հետագա աշխատանքը իմաստ չունի, մենք ոչնչացնում ենք գործընթացը համապատասխան հաղորդագրության թողարկման միջոցով. Else die («Սկզբնաղբյուրը գոյություն չունի!»); Եթե ֆայլը սովորաբար բացվել է, ապա մենք այս մասին ծանուցում կթողարկի և կփորձի համապատասխան հաղորդագրությամբ բացել նախկինում ստեղծված ժամանակավոր ֆայլը. echo "Source ֆայլը գոյություն ունի";

եթե ($ tempHandle = fopen ($ tempFile, "w")) echo "Ստեղծվել է ժամանակավոր ֆայլ"; Հիմա ժամանակն է սկզբնաղբյուր ֆայլից սկսել ընթերցման տողերի մի օղակ, որը կշարունակվի մինչև այն ֆայլը ՝ while (! feof ($ fileHandle)) {

// այստեղ կլինի ընթացիկ գծի հետ աշխատելու կոդը

} Օղակի յուրաքանչյուր քայլին մենք կընթերցենք մեկ տող. $ LineNum տողի հաշվիչը կավելացվի անմիջապես համեմատության գործողության մեջ. If ($ lineToKill! = (++ $ lineNum)) fwrite ($ tempHandle, $ lineToWrite); տողերն ավարտվելուն պես փակեք ֆայլը. Fclose ($ fileHandle);

fclose ($ tempHandle); Վերջապես, վերանվանեք temp ֆայլը սկզբնականի վրա: Եթե այս գործողությունը հաջող է, ապա մենք կուղարկենք համապատասխան հաղորդագրություն. Եթե (վերանվանել ($ tempFile, $ fileName)) echo "$ lineToKill տողը ջնջված է";

Քայլ 5

Լրիվ ծածկագիր

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

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

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

echo «Աղբյուրի ֆայլը գոյություն ունի»;

if ($ tempHandle = fopen ($ tempFile, "w")) echo "Temամանակավոր ֆայլ է ստեղծվել";

}

else die («Աղբյուրի ֆայլը գոյություն չունի»); մինչդեռ (! feof ($ fileHandle)) {

$ lineToWrite = fgets ($ fileHandle);

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

} fclose ($ fileHandle);

fclose ($ tempHandle);

if (վերանվանել ($ tempFile, $ fileName)) echo "Line $ lineToKill հանվել է";?>

Խորհուրդ ենք տալիս: