スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

(自分用メモ)ブログ用のコンバーター

今までテキスト書いてブログに貼る付ける感じで書いていたのですが、結構時間かかっていた自動化しました。だいたいこんな感じになります(https://twitter.com/koshian2/status/207903666726899712/photo/1/large)。

変則的な記事にはなかなか対応できませんが、問題回収のような規則的な並びだとそこまで難しくないです。手動でやると貼付作業だけで1,2時間かかったので、これで時間短縮したいところです。もっといい言語あるでしょうが、めんどくさかったのでRで書いてます。追記を開くと下手くそなスクリプトが見れるよ!

(追記)6/19 画像番号の下4桁が1000未満だとちゃんと表示されないを修正

### 初期設定
pic.address<-"http://blog-imgs-55.fc2.com/n/e/k/nekokan333/" #画像のアドレス
pic.ad.insert<-"1CIMG" #画像の接頭
input.file<-"ヒロイン.txt"
output.file<-"ヒロインアウト.txt"

###ここまでをいじって####

#画像URL
callpic<-function(x){
filename<-paste(c(pic.ad.insert,x,".jpg"),collapse="")
fileurl<-paste(c(pic.address,filename),collapse="")
str<-paste(c(
"<a href=\"", fileurl, "\" target=\"_blank\"><img src=\"",
fileurl, "\" alt=\"", filename,
"\" border=\"0\" width=\"440\" height=\"330\" /></a>"),
collapse="")
return(str)
}

#問題番号の検索
getprobn<-function(s){
m<-nchar(s)
x<-as.integer(substring(s,1:m,1:m)[-c(1,m)])
x.n<-sum(10^((m-3):0)*x)%%10000
x.a<-substring(x.n,1:nchar(x.n),1:nchar(x.n))
x.b<-c(rep(0,4-length(x.a)) , x.a)
return(paste(x.b,collapse=""))
}

#リンクの付加
addlink<-function(ss){
sn<-nchar(ss)
sp<-substring(ss,1:sn,1:sn)
spp<-match(c(":",";"),sp)
sstart<-spp[!is.na(spp)][1]+1
s<-paste(sp[sstart:sn],collapse="")
prestr<-paste(sp[1:(sstart-1)],collapse="")
str<-paste(c(prestr,
"<a href=\"", s, "\" target=\"_blank\" title=\"",
s, "\">", s, "</a>"
), collapse="")
return(str)
}
##########

tmp<-readLines(input.file)

n<-length(tmp) #行数
probstate<-0 #問題の状態(0問題の外、1URL前、2答え後、3以降)
probnum<-c(0,0) #問題の番号

i.in<-1; i.out<-1 #入力ファイルと出力ファイルのカウンター
ts<-tmp #一時的に格納しておくベクトル


while(i.in<=n){
##stateが0のとき
if(probstate==0){
##[]があるか
if(!is.na(charmatch("[",tmp[i.in])) || !is.na(charmatch("[",tmp[i.in]))){
#あった場合
probstate<-1
probnum[1]<-getprobn(tmp[i.in])
}
i.in<-i.in+1
i.out<-i.out+1
##stateが1のとき
}else if(probstate==1){
if(!is.na(charmatch("[",tmp[i.in])) || !is.na(charmatch("[",tmp[i.in]))){
#分岐の場合
probnum[2]<-getprobn(tmp[i.in])
ts<-append(ts, c(callpic(probnum[1]),callpic(probnum[2])) , after=i.out)
i.out<-i.out+3
i.in<-i.in+1
}else{
#分岐なしの場合
ts<-append(ts, callpic(probnum[1]), after=i.out-1)
i.out<-i.out+1
}
probstate<-2
##stateが2のとき
}else if(probstate==2){
#答えがあるか
if(!is.na(charmatch("答え",tmp[i.in])) ){
#ある場合
ts[i.out]<-paste(c("<strong>",tmp[i.in],"</strong>"), collapse="")
probstate<-3
i.in<-i.in+1; i.out<-i.out+1
}else{
i.in<-i.in+1; i.out<-i.out+1
}
##stateが3のとき
}else if(probstate==3){
##空白行を含む時
if(tmp[i.in]==""){
probstate<-0 #リセット
probnum<-c(0,0)
i.in<-i.in+1; i.out<-i.out+1
} else {
#リンクを含むとき
if(length(grep("ttp",tmp[i.in]))!=0 ){
ts[i.out]<-addlink(tmp[i.in])
}
i.in<-i.in+1; i.out<-i.out+1
}
}
}

writeLines(ts,output.file)


スポンサーサイト
プロフィール

こしあん

Author:こしあん
(:3[____]
【TwitterID : koshian2】
【ほしい物リスト】http://goo.gl/bDtvG2

Twitter
カウンター
天気予報

-天気予報コム- -FC2-
カテゴリ
月別アーカイブ
最新記事
最新トラックバック
検索フォーム
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。