0
0

More than 1 year has passed since last update.

PDF(SBI証券、割当株式等のお知らせ)からCSV(テキスト)を作成する

Last updated at Posted at 2020-10-02

2022-09-07 「使い方」の改善。setwd()、getwd()
2020-10-18 Rパッケージ化
#

はじめに


法人税の決算作業で「有価証券を整理する」

通常であれば、
  証券会社のCSV(約定明細)から
  「⑥有価証券の内訳書」を作成するだけです。
ですが、これだと
  「⑥有価証券の内訳書」の株式数量が合わない、
ことがあります。

たぶん、株式分割です。
例えば、
  (9432)NTTは2019-12-31に分割比率1:2で株式分割してるので、
  保有株式数が400株だと800株に変更となります。
この事実を
割当株式として取り込む必要があるのです。

しかしこれが、
SBI証券の場合、
  元ネタがPDFなのですよ。↓サンプル
2020-09-30 20.49のイメージ.jpeg
#

想定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 )
}		
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0