9

右から左に書かれた (ウルドゥー語) テキストにマークアップを追加したいと考えています。目的のために gsub を使用しようとしていますが、これまでに試したことはすべて、目的の出力を生成しません

text <- "یہ جملہ ایک مثال کے لیے استعمال کیا جا رہا ہے"
pattern <- "کیا جا"
replaceWith <- paste0("<somemark>", pattern, "</somemark>")
gsub(pattern, replaceWith, text)

gsub は以下を返します

یہ جملہ ایک مثال کے لیے استعمال <somemark>کیا جا</somemark> رہا ہے

希望の出力。

ここに画像の説明を入力

どうすれば目的の出力を達成できますか?

注:投稿で目的の出力を適切にタイプセットすることさえできませんでした。代わりに画像に頼らなければなりませんでした。

更新:以下の関数は (コンソールで) 文字列を正しく連結しますがmysub、光沢のあるアプリでテキストの順序が正しくないという問題に引き続き直面しています。

mysub <- function(text, pattern){
beforePattern <- substr(text, 1, regexpr(pattern, text)[1]-1)
afterPattern <- substr(text, regexpr(pattern,text)[1] + nchar(pattern), nchar(text))
result <- paste(afterPattern, replaceWith, beforePattern)
result
}
4

2 に答える 2

3

実際には問題はありませんgsub

text <- dput("یہ جملہ ایک مثال کے لیے استعمال کیا جا رہا ہے")
"<U+06CC><U+06C1> <U+062C><U+0645><U+0644><U+06C1> <U+0627><U+06CC><U+06A9>
<U+0645><U+062B><U+0627><U+0644> <U+06A9><U+06D2> <U+0644><U+06CC><U+06D2> 
<U+0627><U+0633><U+062A><U+0639><U+0645><U+0627><U+0644> <U+06A9><U+06CC>
<U+0627> <U+062C><U+0627> <U+0631><U+06C1><U+0627> <U+06C1><U+06D2>"

pattern <- dput("کیا جا")
"<U+06A9><U+06CC><U+0627> <U+062C><U+0627>"

replaceWith <- dput(paste0("<somemark>", pattern, "</somemark>"))
"<somemark><U+06A9><U+06CC><U+0627> <U+062C><U+0627></somemark>"

dput(gsub(pattern, replaceWith, text))
"<U+06CC><U+06C1> <U+062C><U+0645><U+0644><U+06C1> <U+0627><U+06CC><U+06A9> 
<U+0645><U+062B><U+0627><U+0644> <U+06A9><U+06D2> <U+0644><U+06CC><U+06D2> 
<U+0627><U+0633><U+062A><U+0639><U+0645><U+0627><U+0644> <somemark><U+06A9>
<U+06CC><U+0627> <U+062C><U+0627></somemark> <U+0631><U+06C1><U+0627> 
<U+06C1><U+06D2>"

結果 (右から左と左から右の両方の文字を含む文字列) のレンダリングも、私にとって非常に論理的です。

  1. 文字列の先頭には右から左の文字が含まれているため、右から左にレンダリングされます

یہ جملہ ایک مثال کے لیے استعمال

  1. 文字列は左から右の文字で続きます。左から右にレンダリングされ、最後 (以前にレンダリングされたものの左側) に追加されます。

یہ جملہ ایک مثال کے لیے استعمال <somemark>

  1. 次に、文字列は右から左の文字で続きます。右から左にレンダリングされ、最後に追加されます。

یہ جملہ ایک مثال کے لیے استعمال <somemark>کیا جا

  1. 文字列は左から右の文字で続きます。左から右にレンダリングされ、最後に追加されます。

یہ جملہ ایک مثال کے لیے استعمال <somemark>کیا جا</somemark>

  1. 最後に、文字列は右から左の文字で終わります。右から左にレンダリングされ、最後に追加されます。

یہ جملہ ایک مثال کے لیے استعمال <somemark>کیا جا</somemark> رہا ہے

何をレンダリングする必要があるかについてのあなたの考えは、私にはより論理的ではないように思えますが、右から左へのテキストレンダリングの経験がないことを認めなければなりません。

とにかく、書式設定が<b>...</b>HTML のタグのようにレンダラーによって解釈される必要がある場合、それは完全に機能します (markdown/html で):

یہ جملہ ایک مثال کے لیے استعمال <b>کیا جا</b> رہا ہے

としてレンダリングします

ほぼすべての日付が表示されます

光沢のあるものは何も印刷できませんでしたが、疑問符はありません。

???? ???????? ?????? ???????? ???? ?????? ?????????????? <somemark>?????? ????</somemark> ?????? ????

于 2016-11-16T00:34:22.877 に答える
1

やってみました。ただし、セッションから読み取る代わりに、引数をハードコーディングする自由を取りました。

Server: 

output$mysub <- function(){ # (text=NULL, pattern=NULL)

text <- "یہ جملہ ایک مثال کے لیے استعمال کیا جا رہا ہے"
pattern <- "کیا جا"

Encoding(text) <- "UTF-8"
Encoding(pattern) <- "UTF-8"

print(text)

beforePattern <- substr(text, 1, regexpr(pattern, text)[1]-1)
afterPattern <- substr(text, regexpr(pattern,text)[1] + nchar(pattern), nchar(text))

replaceWith <- paste0("<somemark>", pattern, "</somemark>")
result <- paste(afterPattern, replaceWith, beforePattern)

# result <- paste( beforePattern, replaceWith, afterPattern)
# Encoding(result) <- "UTF-8"
print(length(result))
print(result)

return(result)
}


# ui.R: 

h2( textOutput("mysub") )

光沢のあるWebページで得た出力は次のとおりです。 双方向テキスト出力

于 2016-11-18T13:55:55.160 に答える