2016-08-11 7 views
0

数分ごとに更新される.jsonファイルがあります。どのようにしてファイルへの変更をチェックしているRにループを書きますか?私はfileSnapshot関数とchangedFiles関数の使用を考えていました。 .jsonファイルの更新が終了するまで、jsonファイルの文字列をリストに追加します。これは私の現在の不完全なコードです:jsonファイルの変更をチェックしてリストに追加する、Rでループを書くにはどうすればよいでしょうか?

msg <- fromJSON(paste(readLines("order.json"), collapse="")) 
msgList <- list() 

some sort of loop:{ 
    count <- length(msgList)+1 
    msgList[[count]]<- msg 
} 
+0

ここではさまざまな質問があります。あなたを止める一つのことに集中できますか? – Seth

答えて

2

ここにいくつかの一般的なアイデアがあります。 toolsパッケージのmd5sumを使用して、ファイルが更新されているかどうかを確認します。 while(...) {}内のifブロックは、ファイルの確率的更新をシミュレートします。 1つの質問は、ファイルがであり、最後にが更新を停止したことをどのように知っているかです。ここでは、ファイルが3つのループの後に更新されていない場合にのみ、ループを中断するカウンタとしてjを使用します。

library(tools) 

writeLines(text=paste(Sys.time()), "foo.txt") 
new <- old <- md5sum("foo.txt") 
msg <- list() 
msg[[1]] <- readLines("foo.txt") 
i <- 2 
j <- 1 
while(!identical(old, new) | j<3) { 
    if (!identical(old, new)) { 
    msg[[i]] <- readLines("foo.txt") 
    j <- 1 
    i <- i + 1 
    } else { 
    j <- j + 1 
    } 
    old <- new 
    Sys.sleep(1) 
    if(sample(c(TRUE, FALSE), 1, p=c(.6, .4))) { 
    cat("Updating\n") 
    writeLines(text=paste(Sys.time()), "foo.txt") 
    } 
    new <- md5sum("foo.txt") 
} 

unlist(msg) 
# [1] "2016-08-11 17:50:49" "2016-08-11 17:50:51" "2016-08-11 17:50:53" 
# [4] "2016-08-11 17:50:54" "2016-08-11 17:50:55" "2016-08-11 17:50:57" 
# [7] "2016-08-11 17:50:58" "2016-08-11 17:50:59" "2016-08-11 17:51:00" 
# [10] "2016-08-11 17:51:01" "2016-08-11 17:51:04" "2016-08-11 17:51:07" 
# [13] "2016-08-11 17:51:09" "2016-08-11 17:51:10" 
関連する問題