オンセンログ→どどんとふ風ログコンバータ

#はじめに
[Discord版](https://qiita.com/HikaruR/items/02517218b9f29390513d)とは内容や操作感が微妙に異なるので、ログの変換に来た方は注意をお願いします。

###TRPGer向け
オンセンで行ったテキストセッションログを、どどんとふ風ログに変換するツールとして
個人用に作ったものを、TRPG仲間のために公開しているものです。
現時点では使い辛いかと思いますので、[マシュマロ](https://marshmallow-qa.com/midtrpg?utm_medium=url_text&utm_source=promotion)等でドンドン意見をください。
気が向いたらアップデートします。

###プログラマ向け
コードが美しくない、説明がわかりにくい等の指摘を歓迎しています。


##使うもの
・オンセンのセッションログ（csv形式）
：必ず取得したそのままのログを用いてください。
　編集を加えてしまっていた場合、動作を保証できません。
・RStudio
：ログを変換するために使用しているプログラム言語、及びそれを使いやすくするGUIです。
　説明をここに述べた方が良かったら言ってください。とりあえず省略しています。

#使い方
##初回セットアップ

###RStudioセットアップ編
[R言語本体とRStudio](https://qiita.com/hujuu/items/ddd66ae8e6f3f989f2c0)をインストール
任意で新規プロジェクト作成＆作業ディレクトリ指定
Discord版ログ変換もご利用の方は、同じプロジェクト内にすることを推奨

リンク先は@hujuuさんの記事です。

####新規プロジェクト作成＆作業ディレクトリ指定のやり方
左上のFile→NewProject→NewDirectory→NewProjectへ進む。
`Directory name`へ任意の名前を付け、出力したログを置く場所を
`Create project as subdirectory of:`で指定する。

###関数登録編
変換プログラム本体にある`colors_pre`をRStudioにコピペ。エンターキーで実行。
`log_conv_onsen`も同じように実行。
RStudioのFunctionsの欄を見て、clolrs_preとlog_conv_onsenが登録されているのを確認。

＊次回からはここまで省略可能
　[毎回作業すること](#毎回作業すること)以降のみでOK

#変換プログラム本体
<details><summary>折りたたみ（クリックで展開）</summary><div>

```R:colors_pre
colors_pre <- function(x) {
    namecolor <- 0:x
    name <- 0:x
    namecolor[1] <- "#00aa00"
    name[1] <- readline("systemname : ")
    for (i in 1:x+1) {
        name[i] <- readline("name : ")
        namecolor[i] <- readline("HTMLcolor : ")
    }
    names(namecolor) <- name
    namecolor <<- namecolor
    return(namecolor)
}
```

```R:log_conv_onsen
log_conv_onsen <- function(x = "log0", y = 1, namecolor = TRUE, date = 0){
    op <- c("<?xml version='1.0' encoding='UTF-8'?>",
            "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>",
            "<html xmlns='http://www.w3.org/1999/xhtml' lang='ja'>",
            "  <head>",
            "    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />",
            "    <title>chatlog : null</title>",
            "  </head>",
            "  <body>")
    op <- iconv(op, from = "CP932", to = "utf-8")
    end <- c("  </body>",
             "</html>")
    end <- iconv(end, from = "CP932", to = "utf-8")
    csv <- read.csv(paste(x, ".csv", sep = ""), header = F)
    taleker <- 1:nrow(csv)
    color <- 0
    if (is.logical(namecolor) == TRUE) {
        namecolor <- colors_pre(y)
    }
    if (date == 0) {
        csv["V1"] <- " "
        } else if (date == 1) {
            csv["V1"] <- lapply(csv["V1"], str_sub, start = 12, end = -4)
            #return(csv["V1"])
        } else if (date == 2) {
            csv["V1"] <- lapply(csv["V1"], str_sub, start = 6, end = -4)
    }
    for (i in 1:nrow(csv)) {
        for (j in 1:length(namecolor)) {
            if (csv[i,3] == names(namecolor)[j]) {
                color <- namecolor[j]
                break
            } else {
                color <- "#000000"
            }
        }
        taleker[i] <- paste("[", csv[i,2], "]", csv[i,1], "：<font color='", color, "'><b>", csv[i,3], "</b>：", csv[i,4], "</font><br>", sep = "")
    }
    html <- c(op, taleker, end)
    write(html, file = paste(x, ".html", sep = ""), append = F)
    #html <- data.frame(c(op, taleker, end))
    #write.table(html, file = paste(x, ".html", sep = ""), fileEncoding = "utf-8", append = F)
}
```
</div></details>

##毎回作業すること
###ログ取得編

1. オンセンのセッションルームからログを入手
2. 作業ディレクトリ（[新規プロジェクト作成＆作業ディレクトリ指定のやり方](#新規プロジェクト作成作業ディレクトリ指定のやり方)で指定した場所）へログを置く

###RStudio上でやること
一行ずつコピペして実行。

```R
install.packages("tidyverse")
library(tidyverse)
#RStudio起動後、インストール・ライブラリ済なら省略可能

x <- 人数  #半角数字。例：x <- 9
colors_pre(x)
#systemneme:　システム　と記入してエンターキー
#"name : "　に発言者の名前（かな・カナ・漢字可能）、"HTMLcolor : "　に付けたい色のカラーコードを書いてエンターキー

log <- "ログ名" 
#※「ログ取得編の2.」で置いたログファイル名にする。半角英数字のみを推奨
#半角ダブルクォーテーションは絶対に外さない。

log_conv_onsen(log, , namecolor)
#第四引数に1と入力すると時分のタイムスタンプ、2と入力すると更に月日も表示される。
#log_conv_onsen(log, , namecolor, 1)　などとすればよい。
```

#後処理

出来あがったファイル`（ログ名）.html`をテキストエディタで開き、
エンコードを`UTF-8`に変更して保存してください。


#動作に異常があったら？
[変換プログラム本体](#変換プログラム本体)の中の`log_conv_onsen`をもう一度コピペ、実行。
[RStudio上でやること](#rstudio上でやること)に戻り再びコピペ、実行。
ログの取得～ファイル名変更はしなくてよい。

### 'str_sub' を含むエラーが出た場合
```R
install.packages("tidyverse")
library(tidyverse)
#RStudio起動後、インストール・ライブラリ済なら省略可能
```
ここからやり直す。

###一行目`library(tidyverse)`からエラーが出た
`Updating Loaded Packages`という表示ならば、Cancelを押してください。
既にインストール済みという表示です。深刻なエラーではありません。

```R
x <- 人数  #半角数字。例：x <- 9
```
から再開してください。

####謝辞
当記事の説明文、及び機能改善に多大に協力頂いたM氏に感謝します。