| Autor | Zpráva | ||
|---|---|---|---|
| Leopik x Profil * |
#1 · Zasláno: 3. 5. 2008, 18:10:59
Ako by som mohol v subore mazat vzdy 10 riadok? teda sa texty doplnuju a text na 10 riadku by sa vymazal.
|
||
| Leopik x Profil * |
#2 · Zasláno: 3. 5. 2008, 18:16:48
staci mi len funkcia ako napr. tempnam, ja si to uz potom najdem
|
||
| bukaj Profil |
#3 · Zasláno: 3. 5. 2008, 19:39:14 · Upravil/a: bukaj
Leopik x
Myslím, že na toto v PHP žádná speciální fce není. Ale lze to vyřešit jednoduše: <?php
// přijímá celkem čtyři parametry, přičemž poslední je nepovinný
// funkce se nestará o pozici v souborech a neošetřuje žádné chyby
// - resource vstupního souboru
// - resource pro výstupní soubor
// - číslo řádku, který se nemá zapsat do výstupního souboru
// - nepovinný parametr, který bude použit jako znak (či více znaků) znamenající konec řádku
function smaz_radek($vstup, $vystup, $radek_k_vymazu, $konec_radku = "\n")
{
$jsme_na_radku = 1; // na začátku jsem na 1. řádku
while (!feof($vstup)) { // čteme, máme-li co číst
$precteno = fread($vstup, strlen($konec_radku));
if ($precteno == $konec_radku) { // pokud se přečtené shoduje s koncem řádku,
$jsme_na_radku++; // zvýšíme počítadlo řádků
}
if ($jsme_na_radku != $radek_k_vymazu) { // pokud nejsme na řádku, který má být vymazán,
fwrite($vystup, $precteno); // můžeme zapisovat do výstupního souboru
}
}
}
// příklad:
$vstupni_soubor = fopen("soubor.txt", "r");
$vystupni_soubor = fopen("vystup.txt", "w");
smaz_radek($vstupni_soubor, $vystupni_soubor, 10); // smaže 10. řádek souboru
fclose($vstupni_soubor);
fclose($vystupni_soubor);
|
||
| Leopik x Profil * |
#4 · Zasláno: 3. 5. 2008, 20:57:37
Diki! Moc si mi pomohol
|
||
| krteczek Profil |
#5 · Zasláno: 3. 5. 2008, 23:13:31
šlo by to i pomocí file()
$soubor = "soubor.txt";
$delete= 10;
$del = $delete - 1;# file vytvoří array a první čádek má nulu jako klíč
$a = file($soubor);
unset($s[$del]);
file_put_contents($soubor, join("\n", $a));
udělat z toho funkci je drobnost ;-) |
||
| bukaj Profil |
#6 · Zasláno: 4. 5. 2008, 00:19:18 · Upravil/a: bukaj
Leopik x
Schválně jsem si udělal test mého a krteczekova řešení. Vyšlo z toho, že moje je mnohokrát (a to opravdu výrazně) pomalejší než jeho, na druhou stranu alespoň spotřebovává méně paměti :) Jelikož pravděpodobnost toho, že budeš pracovat se soubory takové velikosti, že bys překročil paměťový limit je malá, doporučuji tedy použít to krteczekovo. |
||
| imploder Profil |
#7 · Zasláno: 4. 5. 2008, 10:06:15
Schválně jsem si udělal test mého a krteczekova řešení. Vyšlo z toho, že moje je mnohokrát (a to opravdu výrazně) pomalejší než jeho, na druhou stranu alespoň spotřebovává méně paměti :) Jelikož pravděpodobnost toho, že budeš pracovat se soubory takové velikosti, že bys překročil paměťový limit je malá, doporučuji tedy použít to krteczekovo.
Jak to poznáš u tak krátkého skriptu? |
||
| krteczek Profil |
#8 · Zasláno: 4. 5. 2008, 10:55:07
imploder: mé řešení okamžitě při čtení udělá array ze všech řádků, neprocházím žádným cyklem, jen smažu položku v array, která má hodnotu klíče o jedno menší než je řádek v souboru (soubor nultý řádek nemá) a opět pomocí join a file_put_contents uložím jako text
já bych to řešil ještě tak, že bych ukládal rovnou serializované pole (file_put_contents($soubor, serialize($a))) a načítal také rovnou pole $a = unserialize(file_get_contents($file)); |
||
| Leopik x Profil * |
#9 · Zasláno: 4. 5. 2008, 20:46:36
OK dakujem vsm vsetkym. Potom ski to uz doladim. Este raz dakujem
|
||
|
Časová prodleva: 17 let
|
|||
0