Autor Zpráva
spyworld
Profil
Ahoj všichni odborníci! Lámu si hlavu nad problémem, který se mi nepodařilo vyřešit a proto prosím o radu.

Uvedu příklad: Mám v souboru SOUBOR.SQL obsah:" cokoliv container_ids="1" zase neco container_ids="23" a zase neco container_ids="306"


Potřebuji pomocí PHP najít všechny řetězce "container_ids="JAKEKOLIV CISLO" a to číslo zvětšit o 10,


tak aby výsledkem byl obsah souboru:" cokoliv container_ids="10" zase neco container_ids="33" a zase neco container_ids="316"


Pokud se najde někdo, kdo mi pomůže, budu moc rád.

Děkuji za váš čas
Tomášeek
Profil
spyworld:
Spíše bych se ptal, co opravdu potřebuješ udělat a proč. To zadání nedává smysl. Pokud chceš někde něco pricitat, pricitej rovnou v databázi.
lionel messi
Profil
spyworld:

Súhlasím s kolegom, poskytnem však aj odpoveď k tvojmu riešeniu

S tým ti pomôžu takzvané regulárne výrazy (ak ti nič nevravia, odporúčam samoštúdium - máš o zábavu postarané až do konca pandémie :-)). Okrem štruktúry samotných regulárnych výrazov ťa bude zaujímať najmä funkcia preg_replace_callback.

Regulár by vyzeral zhruba takto:

'~(container_ids=")(\d+)(")~'

a callback takto

function ($matches) {
  return $matches[1] . ($matches[2] + 10) . $matches[3];
}

Funguje, ale takmer určite tu bude aj lepšie riešenie.
mckay
Profil
Tomášeek:
To zadání nedává smysl
Na mě to trochu působí jako něco, co by mohlo být zadáním školního projektu. :-)

K tématu: Pokud z hlediska implementace není možné použít MySQL databázi (vycházím z toho, že to je často používaná DB z PHP), můžete použít sqlite (souborová databáze, která se z PHP i vytvoří). Do ní importovat .sql soubor a nad ní potom provést požadované operace normálně přes SQL. Pak jen export a hotovka.

Pokud by to snad náhodou bylo tak, že použít SQL dotazy není možné kvůli porušení vazeb mezi tabulkama (hláška obsahující variaci slova constraints), pak prosím přehodnoťte.
spyworld
Profil
Dobře, trochu upřesním své zadání. Slučuji několik stránek ve wordpressu, které používají plugin nextgen gallery.

jedna stránka má galerie s galleryid 1-120
druhá stránka má galerie s galleryid 1-50

proto potřebuji v na druhé stránce posunout všechny gallid na 121-170 abych mohl tabulky sloučit a nedocházelo k duplicitě.

to vše jde bez problému pomocí sql příkazu UPDATE.

Problém je v tom, že tento řetězec: container_ids="1" je umístěn přímo v textu příspěvku a musel bych ho aktualizovat (navýšit o 120) ručně. Proto se snažím v souboru sql najít všechny řetězce container_ids="XXX" a číslo zvětšit o 120


lionel messi:


function ($matches) {
  return $matches[1] . ($matches[2] + 10) . $matches[3];
}



Moc dekuji za toto reseni. Usetrilo mi mnoho casu a je funkcni. Upravil jsem ho do teto podoby a vse OK. Jeste jednou moc dekuji!!!!!!


<?php

$fp = fopen("PUVODNISOUBOR.sql", "r") or die("can't read stdin");
$soubor = fopen("AKTUALIZOVANYSOUBOR.sql", "w") or die("can't read stdin");

while (!feof($fp)) {
$line = fgets($fp);
$line = preg_replace_callback(
'~(container_ids=")(\d+)(")~',
function ($matches) {
return $matches[1] . ($matches[2] + 10) . $matches[3];
},
$line
);
// echo $line;
fwrite($soubor, $line);
}
fclose($fp);
fclose($soubor);

?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0