Autor | Zpráva | ||
---|---|---|---|
spyworld Profil |
#1 · Zasláno: 5. 4. 2020, 00:44:59
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 |
#2 · Zasláno: 5. 4. 2020, 10:41:00
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 |
#4 · Zasláno: 5. 4. 2020, 15:55:33
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); ?> |
||
Časová prodleva: 4 roky
|
0