2016-11-11 27 views
9

Sağdan sola yazılan (Urduca) metne işaret eklemek istiyorum. Ben amaçla gsub kullanmaya çalışıyorum ama şimdiye kadar denedim her şey şubidi dizeleri r'de düzgün bir şekilde nasıl birleştirilir?

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

istenen çıkışı verir gsub istenen çıktı üretmesi

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

üretmez.

enter image description here

nasıl istenilen çıktıyı modernleşmek olabilir?

Not: Hatta yazımda istenen çıktıyı düzgün yazamadım, bunun yerine bir görüntüye güvenmem gerekiyordu.

Güncelleme: rağmen mysub işlevi aşağıda doğru, ben parlak uygulamasında metnin yanlış düzenin sorunu karşılaşmaya devam (konsolda) dizeyi birleştirir.

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 
} 
+0

Hm, çıkış temelde ters? Bu yazı tipi yüzünden olabilir mi? Sağdan sola yazılır mı? (Üzgünüz, ben Avrupalıyım ...) – drmariod

+0

Hayır, benim bildiğim kadarıyla bir yazı tipi sorunu değil. –

cevap

1

ben bir deneyin verdi. Yine de, oturumu okumak yerine, kodları kodlamanın zorluğunu aldım.

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")) 

Ben parlak web sayfasında var çıkışı oldu: bidi text output

3

gsub ile hiçbir sorun aslında yoktur:

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>" 

sonucun render (sol ve sağ karakterlere sola hakkı hem içeren bir dize) bana da gayet mantıklıdır:

  1. Dize başlangıcı sağdan sola doğru karakterler içeriyor, böylece sağdan sola doğru işleniyor

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

  1. sonra dize doğru karakterlere sol ile devam ediyor.

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

, soldan sağa ve sonunda (daha önce işlenen şeyin solda) eklenir hale getirilen
    sonra dize sol karakterlere hakkı ile devam
  1. . Bu, sola izni verilen ve sonunda ilave edilir

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

  1. sonra dize doğru karakterlere soldan devam eder. Bu, soldan sağa ve sonunda ilave olarak bırakılmaktadır

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

  1. ve nihayet dize sol karakterlere hakkı ile sona erer. Sağdan sola ve sonunda eklenir.

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

bana daha mantıklı görünmüyor oluşturulması gereken, ama ben sola metin oluşturma hakkına sahip deneyimi yok itiraf etmeliyim ne Fikrin. biçimlendirme HTML <b>...</b> etiketleri gibi Oluşturucu tarafından yorumlanmalıdır varsa

neyse, o zaman (markdown/html) mükemmel çalışıyor:

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

olarak vermektedir یہ جملہ ایک مثال کے لیے استعمال کیا جا رہا ہے ben parlak ama q hiçbir şey yazdırmak için yönetilen değil

uestion işaretleri:

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

+0

İşaretlemenin mükemmel bir şekilde çalıştığını düşündüğünüz gibi, markdown + html'de parlaklık oluşturmak sorunludur. Sağdan sola ve soldan sağa dize oluşturma talimatı vermek için unicode kontrol karakterleri eklenebilir mi? –

+0

@ImranAli, Evet, unicode kontrol karakterleri burada yararlıdır: 'gsub (pattern, replaceWith, paste0 (" \ u202b ", text," \ u202c "))' çalışıyor gibi görünüyor. Daha fazla bilgi için cevabım [burada] (https://stackoverflow.com/a/45109292/1851712) bakın. – Henrik

İlgili konular