| mh | Uvodzovky |
| Pekny den! Poradi mi niekto ako odstranim z textu znak uvodzovky ("). Dakujem. |
| mh | dodatok |
24.04.2009 14:13:49
ID: 2905.1
| Zabudol som uviest príklad: mam napr. text: "abcd"efgh" potrebujem odstranit uvodzovku medzi 'd' a 'e'
Zaujimalo by ma riesenie cez LS a vzorce. Dakujem.
|
| Martin Humpolec | Re: Uvodzovky |

 24.04.2009 15:28:30
ID: 2905.2

| @ReplaceSubString( odkud; "\""; "")
skriptem to asi takhle elegantně nepůjde, takže to buď schovat do Evaluate nebo pokud člověk ví, že to tam bude jenom jednom tak StrLeft a StrRight. |
| Peter Mesiarik | Re: Uvodzovky |

 developer
24.04.2009 23:15:00
ID: 2905.3

| v LS by som pouzil Replace |
| mh | nejde to :-(( |
28.04.2009 09:45:56
ID: 2905.4
| Tak som to skusal a nejde to!
Tak este raz, mam text zadany v premennej tmp$: tmp$ = „abcd „efgh“ ijk“
Teraz potrebujem odstranit uvodzovky vo vnutri textu, cize potrebujem dostat vysledny text: tmp$ = „abcd efgh ijk“
pri pouziti nasledujuceho zapisu LN zahlasi, ze operacia zlyhala: tmp0 = Evaluate(| @ReplaceSubstring( "| & tmp$ & |"; "\""; "" ) |)
skusal som dat aj tri uvodzovky, štyri ale nejde to
pri ladeni v LS som si vsimol, ze mi dany text zobrazuje takto: „abcd „„efgh““ ijk“
Neviem ako na to. Da sa to vobec? Budem vdacny za kazdu radu.
|
| Ooaniki | No nevim jestli jsem pochopil problem |
LN admin
28.04.2009 11:34:52
ID: 2905.5

| Neslo by to nejak takto?
Dim text As String text = |„abcd „efgh“ ijk“| Dim array2(2) As String Dim array3(2) As String array2(0) = "„" array2(1) = "“" array2(2) = |"| array3(0) = "" array3(1) = "" array3(2) = "" text = Replace(text, array2, array3) |
| Jiří Krákora | Re: Uvodzovky |

 IT
28.04.2009 12:03:13
ID: 2905.6

| Úplně primitivně:
Dim txt As String
txt = |abc "def" ghi|
Msgbox txt ' Nejprve zobrazit puvodni text
Msgbox Replace(txt, |"|, "") ' Pak zobrazit text bez uvozovek
Lokutus |
| mh | :-(( |
28.04.2009 12:34:03
ID: 2905.7
| Tak tento zapis mi LN neakceptuje: tmp0 = Evaluate(| @ReplaceSubstring( "| & tmp$ & |"; |"|; "" ) |)
Ale zatial dik za pomoc.
|
| mh | :-)) tento zapis akceptuje |
28.04.2009 12:44:10
ID: 2905.8
| Tento zapis funguje: tmp1$ = Replace( tmp$, |"|, "" )
este by som poprosil o radu ako to zapisat cez vzorec
Dakujem.
|
| Jiří Krákora | Re: Uvodzovky |

 IT
28.04.2009 13:01:16
ID: 2905.9

| Vzorec napsal už Martin Humpolec na začátku.
txt := "aaa \"bbb\" ccc";
@Prompt([OK]; "Puvodni text s uvozovkami"; txt);
@Prompt([OK]; "Novy text bez uvozovek "; @ReplaceSubstring(txt; "\""; ""))
Lokutus |
| mh | @ReplaceSubstring |
28.04.2009 13:16:48
ID: 2905.10
| Ano, ale v ID: 2905.4 som uviedol, ze mi pri tomto zapise LN zahlasi zlyhanie operacie.
tmp0 = Evaluate(| @ReplaceSubstring( "| & tmp$ & |"; "\""; "" ) |)
tak som myslel, ze zapis asi nebude spravny.
|
| VZ | IsArray |
28.04.2009 13:45:02
ID: 2905.11
| Toto je správně: tmp0 = Evaluate(| @ReplaceSubstring( "| & tmp$ & |"; "\""; "" ) |) Jenže ten výsledek je pole (Array), takže pokud se má hodnotou v tmp0 dále pracovat, pak třeba takto: msgbox tmp0(0) anebo takto: If Isarray(tmp0) Then Forall t In tmp0 Msgbox t End Forall End If |
| Jiří Krákora | Re: Uvodzovky |

 IT
28.04.2009 13:55:34
ID: 2905.12

| Ale to je samozřejmé že operace selhala. Důvod je právě ten, že inkriminovaná proměnná obsahovala znak uvozovek. Jakýkoliv evaluate selže při práci s textem, který obsahuje uvozovky. Proto je lepší ve skriptu používat prostý lotus skriptový Replace.
Lokutus |
| mh | to VZ |
28.04.2009 13:59:40
ID: 2905.13
| Viem, ze evaluate vracia hodnotu typu pole, ale ja som pisal, ze LN mi uz priamo na danom vzorci zastavi cinnost a hlasi "Operation failed". Ale ako som pisal v ID: 2905.4, ci nemôze byt problem v tom, ze v texte mam zapisane „abcd „efgh“ ijk“ ale pri ladeni LS mi v okne ladenia programu zobrazuje text s dvoma uvodzovkami „abcd „„efgh““ ijk“. Ci do daneho vzorca nemam zapisat väcsi pocet lomitiek alebo uvodzoviek. Dakujem.
|
| mh | to Jiří Krákora |
28.04.2009 14:03:02
ID: 2905.14
| ID: 2905.12
Takze cez vzorec dany problem nevyriesim.
Dakujem to som nevedel.
|
| VZ | To záleží na okolnostech |
28.04.2009 14:12:02
ID: 2905.15
| Odkud se ten text do té proměnné tmp$ dostane? Pokud by byl původně v nějakém políčku (Field) v dokumentu (např. v poli Subject), pak by to snad šlo i takto:
Dim ws As New NotesUIWorkspace tmp0 = Evaluate({@ReplaceSubstring(Subject; "\""; "" )}, ws.CurrentDocument.Document)
Nebylo by třeba vůbec používat nějakou proměnou tmp$ v LS. |
| mh | to VZ |
28.04.2009 14:32:00
ID: 2905.16
| Ano, ten text sa dostava do premennej z policka. Skusal som aj tento zapis: tmp0 = Evaluate(| @ReplaceSubstring( "| & doc.ag_aktivita( 0 ) & |"; "\""; "" ) |) ale nejde to, neviem ci som vas spravne pochopil. Dakujem.
|
| VZ | Je to jednoduché |
28.04.2009 14:40:01
ID: 2905.17
| tmp0 = Evaluate(| @ReplaceSubstring(ag_aktivita; "\""; "" ) |, doc)
|
| Jiří Krákora | Re: Uvodzovky |

 IT
28.04.2009 14:40:14
ID: 2905.18

| Takže já bych to, s dovolením, shrnul, ať z toho neděláme gulash. :-)
1. Pro odstranění znaku uvozovky pomocí vzorců (nikoliv ve skriptu) lze použít toto:
txt := "aaa \"bbb\" ccc";
tmp := @ReplaceSubString(txt; "\""; "")
2. Pro odstranění znaku uvozovky v Lotus Scriptu lze použít toto:
Dim txt As String
Dim tmp as String
txt = |aaa "bbb" ccc|
tmp = Replace(txt, |"|, "")
popř., pokud pracujeme přímo s hodnotou v poli dokumentu, lze použít funkci Evaluate přes zmíněný dokument, tedy např.:
Dim Ses As New NotesSession
Dim Db As NotesDatabase
Dim Col As NotesDocumentCollection
Dim Doc As NotesDocument
Dim tmp As Variant
Set Db = Ses.CurrentDatabase
Set Col = Db.UnprocessedDocuments
Set Doc = Col.GetFirstDocument
tmp = Evaluate({@ReplaceSubstring(Subject; "\""; "" )}, Doc)
Msgbox tmp(0)
POZOR: Nelze použít funkci Evaluate na text, který obsahuje znak uvozovky, pokud se tato funkce neprovádí přímo nad dokumentem, nýbrž pracuje pouze se samotnou hodnotou!
Lokutus |
| JL | nepochopil |
IT
28.04.2009 14:41:44
ID: 2905.19
| Podívejte se do Helpu na parametry fce "Evaluate"
tmp0 = Evaluate(| @ReplaceSubstring( ag_aktivita; "\""; "" ) |, doc)
|
| Martin Humpolec | Re: Uvodzovky |

 28.04.2009 15:05:11
ID: 2905.20

| U toho Evaluate není problém v uvozovkách, akorát se to musí obalit něčím jiným než uvozovkama - v tom je ten problém.
Takže Evaluate( {@ReplaceSubString( |} + tmp$ + {|, |"|, ||)}) by taky mohlo fungovat. |
| VZ | Jiné metody |
28.04.2009 15:05:52
ID: 2905.21
| Existují samozřejmě i jiné způsoby, např.: @Implode(@Explode(ag_aktivita; "\""); "")
tmp0 = Evaluate({@Implode(@Explode(ag_aktivita; "\""); "")}, doc)
Ale na rozdíl od @ReplaceSubstring se to nehodí na multihodnotové pole. A takových různých programátorských udělátek třeba pomocí cyklů by se určitě našlo víc. |
| mpistora | Nevalidní formule |
28.04.2009 16:44:57
ID: 2905.22
| V konstrukci tmp0 = Evaluate(| @ReplaceSubstring( "| & tmp$ & |"; "\""; "" ) |) je problém v tom, že se lotusskriptem zřetězí formule, která pak - v závislosti na obsahu tmp$ - může být nevalidní a Evaluate pak selže. Konkrétně textový literál uzavřený v úvozovkách, který uvnitř obsahuje úvozovky bez předchozího escape znaku \. Podobně by to mohlo dopadnout i při použití { a } (svislítka lze použít jen v LS).
Lepší je proto ve formuli pro Evaluate použít místo skládání literálu referenci pole dokumentu, který se dává jako druhý argument Evaluate. A to i když hodnota v dokumentu není - pak lze nějaký doc vytvořit a jeho pole z lotusskriptu naplnit. Výhodou je, že formule v Evaluate je konstanta a pak se její validnost se kontroluje už při kompilaci skriptu. Nevýhodou je, že je to asi o něco pomalejší. |
| JL | Pro doplnění |
IT
29.04.2009 09:10:35
ID: 2905.23
| Já radši než uvozovky se spětným lomítkem a pod. { "\"" } používam @Char(34) nebo v LS chr(34) |