2022-09-07 「使い方」の改善。setwd()、getwd()
2020-10-18 Rパッケージ化
#
はじめに
法人税の決算作業で「有価証券を整理する」
通常であれば、
証券会社のCSV(約定明細)から
「⑥有価証券の内訳書」を作成するだけです。
ですが、これだと
「⑥有価証券の内訳書」の株式数量が合わない、
ことがあります。
たぶん、株式分割です。
例えば、
(9432)NTTは2019-12-31に分割比率1:2で株式分割してるので、
保有株式数が400株だと800株に変更となります。
この事実を
割当株式として取り込む必要があるのです。
しかしこれが、
SBI証券の場合、
元ネタがPDFなのですよ。↓サンプル
#
想定PDF
位置 | テキスト | |
---|---|---|
x→ | 横の位置 | |
y↓ | ||
上段 | ||
126 | 銘柄、権利区分、権利割当日、分割比率 | y1 |
135 | (銘柄コード) | y2 |
下段 | ||
180 | 加入者名、お預り数量、割当数量、合計数量 | y3 |
縦の位置 |
#
使い方(パッケージ版)
githubにパッケージを作ったのでインストールしてください。
準備.r
library(devtools) # install.packages("devtools")
install_github("nt1969m/sbitools") #面倒な事を聞かれたら、3: Noneで、
PDFのあるファイルパスを指定し、実行して下さい。
CSV作成.R
# setwd() ※PDFのあるディレクトリーを設定
# R本体の場合、 「メニュー」 → 「その他」 → 「作業ディレクトリの変更」
# RStudioの場合、「メニュー」→「Session」→「Set Working Directory」→「Choose Directory」
d <- getwd()
library(sbitools)
dummy <- As(d) # Allocated sharesの略語のつもり
CSVファイル(割当株式等.csv)が作られたはず。
#
使い方(ソース直書き版)
※ご興味のある方のみ、ご参照ください
割当csv.R
# 株式分割
source( "B_0988_SBI証券_割当株式.R" )
# PDF群のディレクトリー
d <- file.path( FY ,"B_0988_SBI証券/割当株式" )
# FY:会計年度(Fiscal Year)のディレクトリ
# ファイル単位であれば
# f <- file.path( d ,"YYYYmmddnnnnnnnnnnnn.PDF" )
# PDF→CSV変換
mei <- 割当株式_d( d ) # ディレクトリー単位
# mei <- 割当株式( f ) # ファイル単位
# _全角csv出力
write.table( mei ,file.path( d ,"割当株式_全角.txt" ) ) # ディレクトリー単位
# write.table( mei ,gsub( ".PDF" ,"_全角.txt" ,f ) ) # ファイル単位
# 半角 ← 全角
h_mei <- 半角( mei )
# _半角csv出力
write.table( h_mei ,file.path( d ,"割当株式_半角.txt" ) ) # ディレクトリー単位
# write.table( h_mei ,gsub( ".PDF" ,"_半角.txt" ,f ) ) # ファイル単位
B_0988_SBI証券_割当株式.R
# pdfデータをインポートするため
library( pdftools ) # install.packages( 'pdftools' )
# 全角→半角
library( stringi ) # install.packages( "stringi")
# 最終型
割当株式.init <- function() {
# 列数を初期化
割当株式 <- data.frame( matrix( NA ,0 ,9 ) )
# 列名を初期化
colnames( 割当株式 ) <- c(
"銘柄" ,"銘柄コード"
,"権利区分" ,"権利割当日" ,"分割比率"
,"加入者名" ,"お預り数量" ,"割当数量" ,"合計数量" )
return( 割当株式 )
}
# y抽出
yn <- function( df ,p ,n ) {
# p:ページ
# n:明細行の"y"
x <- paste0( df[[ p ]]
[ df[[ p ] ]$"y" == n , ]$"x" )
x <- as.integer( x )
o <- order( c( x ) )
t <- paste0( df[[p] ]
[ df[[p] ]$"y" == n , ]$"text" )
return( t[ o ] )
}
# 日付の対処
ymd <- function( ve ) {
d <- grep( "日" ,ve )
if( length( d ) != 1 ) return( ve ) # ベクトルの要素が「1」である事
y <- grep( "年" ,ve )
switch( d
, "1" = {
if( y == 1 ) {
paste0( ve[ d ] ) # 年月日
} else
paste0( ve[ y ] ,ve[ d ] ) # (月日) (年) ※欧米かよ
}
, "2" = paste0( ve[1] ,ve[ d ] ) # (年)月日 or (年月)日
, "3" = paste0( ve[1] ,ve[2] ,ve[ d ] ) # (年)(月)(日)
)
}
# 上段
upper <- function( df ,p ) {
# p : ページ p <- 1
y1 <- yn( df ,p ,126 )
y2 <- yn( df ,p ,135 )
k <- grep( "株式分割" ,y1 )
銘柄 <- y1[ 1:k-1 ]
権利区分 <- y1[ k ]
n <- grep( "[年月日]" ,y1 )
y <- n[ n > k ]
ve <- paste( y1[ y ] )
権利割当日 <- ymd( ve )
n <- grep( ":" ,y1 )
分割比率 <- paste0( y1[n] ,y1[n+1] )
return( c( 銘柄 ,y2 ,権利区分 ,権利割当日 ,分割比率 ) )
}
# 下段
lower <- function( df ,p ) {
# p : ページ
y3 <- yn( df ,p ,180 )
}
# 割当株式
割当株式 <- function( f ) {
# pdf_info( f )
# 入力
Pages <- pdf_info( f )$pages # 総ページ数
df <- pdf_data( f )
# 出力
mei <- 割当株式.init()
for( p in 1:Pages ) {
# ページ単位
mei[ p , ] <- c( upper( df ,p ) ,lower( df ,p ) )
}
return( mei )
}
# 半角
半角 <- function( mei ) {
han <- 割当株式.init()
for( i in 1:nrow( mei ) ) {
han[ i , ] <- stri_trans_nfkc( mei [ i , ] )
}
han[ ,"権利割当日"] <- as.Date( han[ ,"権利割当日" ] ,format="%Y年%m月%d日")
return( han )
}
割当株式_d <- function( d ) {
files <- dir( d ,pattern = ".pdf$" ,ignore.case=T )
stack <- 割当株式.init()
for( i in 1:length( files ) ) {
f <- file.path( d ,files[ i ] ) # ファイル単位
mei <- 割当株式( f )
stack <- rbind( stack ,mei )
}
return( stack )
}