2013-07-30 31 views
6

Karakterleri bir dizede belirli bir konuma çekecek bir işlev bulmaya çalışıyorum. Örneğin, onunla ilgili bir tarih ile uzun dosya adı var ve sadece tarih ile bitirmek istiyorum:Karakterleri ayarlanmış bir konumda ayıkla

'LT50420331984221PAC00_B7.tif' 

ve sadece '1984221' bölümünü istiyorum. Karmaşık bir işlev buldum ama daha zarif bir çözüm olup olmadığını merak ediyordum. Eğer dizede tarihten tam konumunu biliyorsanız

+0

Bunun nasıl sağlandığını bilmiyorum, bu bilgiler verilen cevaplarla evrensel olarak mümkün olacak. Tarih kısmı: her zaman n 'karakterlerinden sonra başlar mı? Her zaman '19XX' veya' 20XX' ile başlayın. Her zaman n 'karakterleri için çalıştırın? Bu sorunun daha kolay yanıtlanmasını sağlayacak daha fazla bilgi verebilir misiniz? – thelatemail

+0

Çözümünüzü OP'ye ekleyebilir misiniz lütfen? – agstudy

+0

Her şey R programlama wiki kitabında açıklanmıştır: http://en.wikibooks.org/wiki/R_Programming/Text_Processing – PAC

cevap

13

sen Örneğin

substr('LT50420331984221PAC00_B7.tif', 10, 16) 
+1

Tarih kısmı _always_ aynı konumda ise, bu benim kullandığım şeydir. – Jesse

3

kullanabilirsiniz:

İşte
gsub('(.*)([0-9]+{7})[A-Z].*','\\2','LT50420331984221PAC00_B7.tif') 
"1984221" 

Ben tarih harfle önce 7 basamak olduğunu varsayalım.

+0

Eğer dizgenin uzunluğunu varsayıyorsanız, substr 'sub' üzerinde' alt 'kullanma avantajı nedir? –

+1

@RicardoSaporta Dizenin uzunluğunu kabul etmiyorum. Uzunluk, belirli bir formattaki bir tarihin uzunluğudır. Bu tarihin konumunu düşünüyorum. – agstudy

+0

evet, aynı şeyleri söylüyoruz, sadece farklı terimler kullanıyoruz. 'Substr' kullanıp kullanamayacağınız bu özel bağlamda 'sub' kullanarak ne aldığınızı merak ediyordum? –

İlgili konular