Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 22. 1. 2016 18:50:26

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Nahrazení textu mezi dvěma znaky - VYŘEŠENO

Zdravím vás, poradil byste mi někdo s tímto problémem? Mám CSV soubor produktů do eshopu a potřeboval bych nějaké hromadné úpravy v popisu produktu a to především odstranění všech hypertextových odkazů, podle mě stačí nahradit resp: odstranit text mezi dvěma znaky. Viz potřebuji tohle, odkaz má přesné znění

href="http://www.nejakadomena.cz/blabla/cokoliv jiného"

takže já potřebuji výsledek

href=""

zkrátka odstranit to mezi uvozovkami, zbytek už odstranit zvládnu.
Moc děkuji za vaše rady.Pavel

Editoval czsars (23. 1. 2016 13:27:45)

Offline

#2 22. 1. 2016 19:27:49

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,526

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

Tomu nějak nerozumím. Vy máte nějaký odkaz

href="http://www.nejakadomena.cz/blabla/cokoliv jiného"

- Nyní chcete odstranit obsah mezi uvozovkami takže zůstane

href=""

- Ale co mne udivuje proč uvádíte, že zbytek už odstranit zvládnete?
     Buď chcete zcela odstranit celý výraz z nějakého řetězce, nebo tam chcete vložit jiný obsah - tedy přesměrovat původní odkaz, ale i to by bylo zbytčně krkolomné. Takže něchápu co opravdu potřebujete. Nezlobte se, ale máme tady ověřeno, že podaný dotaz se nakonec zcela změní. Většinou autor nechce vysvětlit co opravdu potřebuje a uvede příklad, který pokládá za vhodný. To bývá průšvih a téměř vždy se to několikrát upřesní a je to o něčem úplně jiném.
     Hyperlinky bývají na samostatném řádku (buňce původní tabulky) a lze to načíst a bude to jen v určitém sloupci. Tam to stačí dohledat podle prefixu "href" a smazat zcela, nebo dát nahradit, popřípadě REPLACE část textu mezi uvozovkami. Ale opravdu popište problém tak aby to bylo logické a aby to mělo hlavu a patu.

Editoval neutr (22. 1. 2016 19:29:43)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 22. 1. 2016 19:48:31

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

Dobrý den, děkuji za odpověď. Zkusím to trochu osvětlit. Jde o to, že v daném CSV souboru obsahují buňky kompletní popis produktu v eshopu. Eshop se nyní předělává a bude provozován na jiné doméně takže by odkazy nefungovaly a ten začátek hyperlinku tam chci nechat z důvodu, že jsou na správném místě v obsahu celého textu pro případ, že by byly nahrazeny novým odkazem ale pravděpodobně budou odstraněny úplně. Snad jsem to už napsal srozumitelně:-) Děkuji za ochotu.

neutr napsal(a)

Tomu nějak nerozumím. Vy máte nějaký odkaz

href="http://www.nejakadomena.cz/blabla/cokoliv jiného"

- Nyní chcete odstranit obsah mezi uvozovkami takže zůstane

href=""

- Ale co mne udivuje proč uvádíte, že zbytek už odstranit zvládnete?
     Buď chcete zcela odstranit celý výraz z nějakého řetězce, nebo tam chcete vložit jiný obsah - tedy přesměrovat původní odkaz, ale i to by bylo zbytčně krkolomné. Takže něchápu co opravdu potřebujete. Nezlobte se, ale máme tady ověřeno, že podaný dotaz se nakonec zcela změní. Většinou autor nechce vysvětlit co opravdu potřebuje a uvede příklad, který pokládá za vhodný. To bývá průšvih a téměř vždy se to několikrát upřesní a je to o něčem úplně jiném.
     Hyperlinky bývají na samostatném řádku (buňce původní tabulky) a lze to načíst a bude to jen v určitém sloupci. Tam to stačí dohledat podle prefixu "href" a smazat zcela, nebo dát nahradit, popřípadě REPLACE část textu mezi uvozovkami. Ale opravdu popište problém tak aby to bylo logické a aby to mělo hlavu a patu.

Offline

#4 22. 1. 2016 20:58:50

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 503

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

dal bych najít nahradit s povelením regulárních výrazů: najít ".*" nahradit za "" (akorát pozor s těmi uvozovkami je trochu potíž, z klávesnice lezou pokaždý trochu jiné, takže pokud to nefunguje to nakopírovat uvozovky z buňky pomocí ctrl+C/V). Určitě by šel vymyslet sofistikovanější způsob hledání třeba lp něco napíše.


Trochu lepší je hledat text mezi uvozovkami takto: "[^"]*" a nahradit za ""

Editoval ludviktrnka (22. 1. 2016 22:16:43)


LibreOffice 5.2.2.2

Offline

#5 22. 1. 2016 21:12:17

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,526

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

To už smysl dává. Takže pokud rozumím správně, tak s vyhledáním odkazu uvnitř jiného řetězce nemáte a jde vám jen o to najít a smazat text mezi závorkami. Takže asi takto :
Z načtených buněk se vše kopíruje do jiných sloupců - nejlépe v jiném sešitě, ale to chce zkušenosti, proto to popíšu na stejném listu :
     Vymyslím si, že máte úseky 4 sloupce (A,B,C,D), které mohou něco obsahovat.
1. - Doporučuji vybrat celý sloupec "E" a ten obarvit kvůli orientaci.
2. - Do buňky F1 napíšete vzorec :
             

=IF(A1="";"";IF(LEFT(A1;4)= "href";"href"""";A1))

        Poznámka výraz "href"""" můžete nahradit "href" & CHAR(34)& CHAR(34) - nebo jen to "href" protože uvozovky nepotřebujete - jsou jen pro označení místa a může tam být cokoliv.
3. - Buňku F1 zkopírujete do sloupců vedle - konkrétně G1, H1, I1.
4. - Úsek F1:I1 dáte do paměti.
5. - Stisknete Ctrl + End (dostanete se například do buňky I125.
6. - Postavíte se do buňky F125 (kvůli tomu máte vybarvený sloupec).
7. - Stisknete Ctrl+Shift+šipka nahoru. Máte vybraný úsek F1:F125
8. - Vložíte pomocí Ctrl + V vzorce se vykopírují do úseku F1:I125
9. - Ihned při vybraném úseku zadáte Ctrl + C a bez dalšího dále z kontextového menu (pod pravým plačítkem) "Vložit jinak" - dialogem zadat jen čísla a text. = hotovo

Editoval neutr (22. 1. 2016 21:18:05)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#6 23. 1. 2016 13:26:38

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

Chci vám oběma poděkovat, všechny nabízené řešení fungují. Díky moc!

Offline

#7 23. 1. 2016 14:38:11

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

Měl bych ještě dotaz prosím k vašemu postupu, zjistil jsem, že podle toho co jste napsal jde hledat jen mezi těmito uvozovkami ale zkoušel jsem např: tohle {tento text odstranit} vaším postupem, čili takhle {.*} a nahradit takhle {} a nefunguje to.resp: otázka zní jak odstranit text mezi těmito znaky {}

ludviktrnka napsal(a)

dal bych najít nahradit s povelením regulárních výrazů: najít ".*" nahradit za "" (akorát pozor s těmi uvozovkami je trochu potíž, z klávesnice lezou pokaždý trochu jiné, takže pokud to nefunguje to nakopírovat uvozovky z buňky pomocí ctrl+C/V). Určitě by šel vymyslet sofistikovanější způsob hledání třeba lp něco napíše.


Trochu lepší je hledat text mezi uvozovkami takto: "[^"]*" a nahradit za ""

Editoval czsars (23. 1. 2016 14:41:22)

Offline

#8 23. 1. 2016 15:49:31

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,526

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

To co lze dělat pomocí regulárních výrazů je popsáno v nápovědě. Zadejte heslo "Seznam regulárních výrazů". Je tam tabulka která říká co a jak se dá nadefinovat.
     Když potom hledáte a nahrazujete dialogem (Najít a nahradit) musíte regulární výrazy povolit. Jsou pod křížkem "Ostatní možnosti".


PS :
     Jde to nejspíš například pomocí [abc123], nebo [a-e] a jistě i jinak, ale zejména pomocí zpětného lomítka  viz nápověda :
Zvláštní znak, který následuje po "\", se interpretuje jako normální znak a ne jako regulární výraz (kromě kombinací \n, \t, \> a \<). Např. "tree\." najde "tree.", ale ne "treed" či "trees".


     Je to asi jedno - ale hledáte něco jiného nežli jste deklaroval na začátku. To je velmi obvyklé až typické - většinou tazatel zjistí že chtěl něco jiného nežli na co se ptal původně. Důvodem bývá neschopnost správně určit problém nebo zatajování skutečného účelu - ale to Váš případ není.
     Měl byste otevřít nový dotaz ale nejdříve pročíst nápovědu a také články spolu se staršími příspěvky.

   
     Ještě existují další prostředky. Například automatické opravy, kde si můžete nadefinovat co se automaticky nahradí, vzorcem - to je pracnější, ale univerzálnější, nebo makrem.

Editoval neutr (23. 1. 2016 16:13:36)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#9 23. 1. 2016 16:23:44

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

Děkuji za odpověď, nicméně hledám přesně to, co jsem deklaroval a to (odstranění textu mezi dvěma znaky) vi: "odstranittentotext" výsledek "" a nebo odstranit tento text {odstranittentotext} výsledek {}. Místo těch uvozovek, nebo závorek může být cokoliv ale pořád je to dotaz mezi dvěma znaky. Akorát nechápu proč s těmi uvozovkami to šlo a s temi závorkami ne. I tak moc děkuji za odpověď a promiňte opravdu se přiznám, že moc v calcu neumím., jen potřebuji tyto dvě věci a ta druhá mi prostě nejde.

neutr napsal(a)

To co lze dělat pomocí regulárních výrazů je popsáno v nápovědě. Zadejte heslo "Seznam regulárních výrazů". Je tam tabulka která říká co a jak se dá nadefinovat.
     Když potom hledáte a nahrazujete dialogem (Najít a nahradit) musíte regulární výrazy povolit. Jsou pod křížkem "Ostatní možnosti".


PS :
     Jde to nejspíš například pomocí [abc123], nebo [a-e] a jistě i jinak, ale zejména pomocí zpětného lomítka  viz nápověda :
Zvláštní znak, který následuje po "\", se interpretuje jako normální znak a ne jako regulární výraz (kromě kombinací \n, \t, \> a \<). Např. "tree\." najde "tree.", ale ne "treed" či "trees".


     Je to asi jedno - ale hledáte něco jiného nežli jste deklaroval na začátku. To je velmi obvyklé až typické - většinou tazatel zjistí že chtěl něco jiného nežli na co se ptal původně. Důvodem bývá neschopnost správně určit problém nebo zatajování skutečného účelu - ale to Váš případ není.
     Měl byste otevřít nový dotaz ale nejdříve pročíst nápovědu a také články spolu se staršími příspěvky.

   
     Ještě existují další prostředky. Například automatické opravy, kde si můžete nadefinovat co se automaticky nahradí, vzorcem - to je pracnější, ale univerzálnější, nebo makrem.

Offline

#10 23. 1. 2016 16:37:48

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,526

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

Je to jednoduché ty složené závorky {} patří mezi regulární výrazy. Proto je normálně nelze nahradit.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#11 23. 1. 2016 18:45:38

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 503

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

najít \{[^}]*\} a nahradit{}


a nebo tedy jednodušeji najít \{.*\} nahradit {}

Editoval ludviktrnka (23. 1. 2016 18:48:06)


LibreOffice 5.2.2.2

Offline

#12 23. 1. 2016 19:06:10

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,526

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

Asi mi došlo proč hodláte nahrazovat ty složené závorky - zadejte to do dialogu najít a nahradit. Vy jste to testoval na nějakém vzorci - napište jak to vypadá (vykopírujte) nebo napište co s těmi regulárními výrazy děláte. Ony ty závorky Vám zůstaly ve výsledku - to je špatně.
     Já jsem dumal jaký že hyperlink používá složené závorky - neznám takový ale je to možné :-)
Zajímavé bylo proč se sháníte zrovna po těch závorkách které jsou regulárními výrazy. Mezi tím dělám ještě jiný dotaz a tak jsem na to přišel až když jsem si byl kouřnout :-)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#13 24. 1. 2016 02:23:53

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 769

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

ludviktrnka napsal(a)

najít \{[^}]*\} a nahradit{}
a nebo tedy jednodušeji najít \{.*\} nahradit {}

Na ten jednodušší postup si dávejte pozor:

V řetězci
xxx xxx {ccc ccc ccc ccc} bbb bbb bbb {eee eee eee} zzz

ponechá jen
xxx xxx {} zzz

tj. maže vše mezi první { a poslední }

Fungovat by mohlo najít \{.*?\}
ovšem v LO i AOO byly regulární výrazy implementovány chybně. Sice vývojáři hlásí, že je to opraveno, ale minimálně v AOO tento výraz funguje chybně.

Použití najít \{[^}]+\} funguje i pro více závorek, ale je chybné při vnořených závorkách.

Bezpečnější je najít \{[^{}]+\}, odstraní to obsah nejnižších závorek.

Určitě je vhodné data před použitím zazálohovat.

Offline

#14 25. 1. 2016 10:50:36

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Nahrazení textu mezi dvěma znaky - VYŘEŠENO

Všem vám mockrát děkuju, mám se co učit.

Offline

Zápatí