|
| |
'テレモ株価放送から株価をデータベースに格納するスクリプト
NHKNo = 1
'------------------ テレモ株価の抽出&格納
Set ChScan = WScript.CreateObject("ifchsam.ttapi")
Set General = WScript.CreateObject("ifchsam.gapi")
ChScan.OpenChScan("-i")
kbDate = CheckDate(NHKNo, 101, 2, 0) '日付を番組101から得る
if kbDate <> Empty Then
Call GetAndSetData(NHKNo, 101, 0, kbDate)
Call GetAndSetData(NHKNo, 102, 0, kbDate)
Call GetAndSetData(NHKNo, 103, 0, kbDate)
Call GetAndSetData(NHKNo, 104, 0, kbDate)
Call GetAndSetData(NHKNo, 105, 0, kbDate)
Call GetAndSetData(NHKNo, 106, 1, kbDate)
Call GetAndSetData(NHKNo, 107, 2, kbDate)
Call GetAndSetData(NHKNo, 111, 3, kbDate)
Call GetAndSetData(NHKNo, 112, 3, kbDate)
Set DBC = WScript.CreateObject("ADODB.Connection")
Set RS = WScript.CreateObject("ADODB.RecordSet")
DBC.Open "ttkabuka"
SQL = "SELECT * FROM ログ"
RS.Open SQL, DBC, 3, 3
RS.AddNew
RS.Fields("日付") = CDate(kbDate)
RS.Update
RS.Close
DBC.Close
end if
ChScan.CloseChScan(0)
Set ChScan = Nothing
Set General = Nothing
' WScript.Echo "終わり"
'-------------------------------------
'
' 日付の抽出&チェック
'
Function CheckDate(Ch, Prog, Page, mode)
' Set ChScan = WScript.CreateObject("ifchsam.ttapi")
'ChScanからテキストを取り出す
' ChScan.OpenChScan("-i")
set ccc = ChScan.modeform
ccc.rectform = TRUE
ccc.repword = "×"
ChScan.modeform = ccc
bbb = ChScan.GetPageDataHandle (Ch,Prog,Page)
if bbb = 0 then
' ChScan.CloseChScan(0)
' Set ChScan = Nothing
CheckDate = Empty
Exit Function
end if
fff = ChScan.GetTTForm(bbb, onetext)
ChScan.DeletePageDataHandle (bbb)
' ChScan.CloseChScan(0)
' Set ChScan = Nothing
hi = GetStringForm(onetext, 1, 53, 10) ' "1 2 . 2 3 "
hi = Replace(hi, " ", "") ' "12.23"
hi = Replace(hi, ".", "/") ' "12/23"
hi = CStr(Year(Now))&"/"&hi ' "98/12/23"
revDate = CDate(hi) ' 送信日
if mode <> 3 then ' 東証1・2、大証、名証
hi = GetStringForm(onetext, 2, 1, 4) ' "2 2 "
else ' 店頭番組
hi = GetStringForm(onetext, 2, 4, 4) ' "2 2 "
end if
hi = Replace(hi, " ", "") ' "22"
if IsNumeric(hi) then
fi = CInt(hi) ' 確定日にち
else
CheckDate = Empty
Exit Function
end if
ei = Day(revDate)
if fi > ei then '月がかわっている
if Month(revDate) = 1 then
kbDate = DateSerial(Year(revDate)-1, 12, fi) 'しかも新年
else
kbDate = DateSerial(Year(revDate), Month(revDate)-1, fi)
end if
else
kbDate = DateSerial(Year(revDate), Month(revDate), fi)
end if
' ログのチェック
Set DBC = WScript.CreateObject("ADODB.Connection")
Set RS = WScript.CreateObject("ADODB.RecordSet")
DBC.Open "ttkabuka"
SQL = "SELECT * FROM ログ WHERE (日付 = #" & CStr(kbDate) & "#)"
RS.Open SQL, DBC, 3, 3
count = RS.RecordCount
RS.Close
if count > 0 then 'すでにこの日付のデータがある
CheckDate = Empty
else
CheckDate = kbDate
end if
DBC.Close
End Function
'
' データの取り出し&日付のチェック
'
Sub GetAndSetData(Ch, Prog, mode, kbDate)
' Set ChScan = WScript.CreateObject("ifchsam.ttapi")
'ChScanからテキストを取り出す
' ChScan.OpenChScan("-i")
set ccc = ChScan.modeform
ccc.rectform = TRUE
ccc.repword = "×"
ChScan.modeform = ccc
onetext = ""
num=ChScan.GetPageNumber(Ch,Prog)
for j=1 to num
bbb = ChScan.GetPageDataHandle (Ch,Prog,j)
fff = ChScan.GetTTForm(bbb, onetext)
ChScan.DeletePageDataHandle (bbb)
if mode <> 3 then ' 東証1・2、大証、名証
kaku = GetStringForm(onetext, 6, 1, 2) ' 確
hi = GetStringForm(onetext, 2, 1, 4) ' "2 2 "
else ' 店頭番組
kaku = GetStringForm(onetext, 7, 1, 2) ' 確
hi = GetStringForm(onetext, 4, 1, 4) ' "2 2 "
end if
hi = Replace(hi, " ", "") ' "22"
if IsNumeric(hi) then
ihi = CInt(hi)
if kaku = "確" and Day(kbDate) = ihi then ' 確定して日付が正しい
pageIndex = (Prog*100+j)*10
Call SetDataBase(onetext, mode, kbDate, pageIndex)
end if
end if
next
' ChScan.CloseChScan(0)
' Set ChScan = Nothing
End Sub
'
' 9つの銘柄を格納
'
Sub SetDataBase(onetext, mode, dateIn, pageIndex)
bSpace = FALSE '前の欄が空いていない
Set DBC = WScript.CreateObject("ADODB.Connection")
Set RS = WScript.CreateObject("ADODB.RecordSet")
DBC.Open "ttkabuka"
for jj = 1 to 9 '各ページに9つの銘柄
name = GetKabuValue(onetext, jj, 0, FALSE)
if name <> "" then
Select Case mode
case 0
RS.Open "SELECT * FROM 東証1部", DBC, 3, 3
case 1
RS.Open "SELECT * FROM 大名証", DBC, 3, 3
case 2
RS.Open "SELECT * FROM 東証2部", DBC, 3, 3
case 3
RS.Open "SELECT * FROM 店頭", DBC, 3, 3
End Select
RS.AddNew
RS.Fields("名称") = GetKabuValue(onetext, jj, 0, FALSE)
RS.Fields("始値") = GetKabuValue(onetext, jj, 1, bSpace)
RS.Fields("高値") = GetKabuValue(onetext, jj, 2, bSpace)
RS.Fields("安値") = GetKabuValue(onetext, jj, 3, bSpace)
RS.Fields("終値") = GetKabuValue(onetext, jj, 4, bSpace)
RS.Fields("前日比") = GetKabuValue(onetext, jj, 5, bSpace)
RS.Fields("出来高") = GetKabuValue(onetext, jj, 6, bSpace)
RS.Fields("日付") = dateIn
' RS.Fields("市場") = market
' RS.Fields("コード") = code
RS.Fields("PageIndex") = pageIndex+jj '番組*10000+ページ*100+銘柄の位置
RS.Update
RS.Close
bSpace = FALSE '欄を利用
else
bSpace = TRUE '欄が空いた
end if
next
DBC.Close
End Sub
'
' val=0:銘柄, 1:始値, 2:高値, 3:安値, 4:終値, 5:比較, 6:出来高
' num=1〜9
'
Function GetKabuValue(str, num, val, bSpace)
Select Case num
Case 1
col = 3: start = 13
Case 2
col = 3: start = 25
Case 3
col = 3: start = 37
Case 4
col = 3: start = 49
Case 5
col = 11: start = 1
Case 6
col = 11: start = 13
Case 7
col = 11: start = 25
Case 8
col = 11: start = 37
Case 9
col = 11: start = 49
Case Else
GetKabuValue = 0
Exit Function
End Select
if val > 6 then
GetKabuValue = 0
Exit Function
end if
col = col + val
if bSpace then 'JT(101-23)などのように2つの欄を使う可能性がある
size = 24
if num <> 1 or num <> 5 then
start = start - 12
end if
else
size = 12
end if
tmp = GetStringForm(str, col, start, size)
if val = 0 then
'銘柄名
GetKabuValue = Replace(tmp, " ", "")
else
'株価
tmp1 = Replace(tmp, " ", "")
if IsNumeric(tmp1) then
GetKabuValue = CSng(tmp1)
else
i = InStr(1, tmp1, "▼", 0)
if i = 1 then
tmp2 = Right(tmp1, len(tmp1)-1)
if IsNumeric(tmp2) then
GetKabuValue = -1 * CSng(tmp2)
else
GetKabuValue = 0
end if
else
GetKabuValue = 0
end if
end if
end if
End Function
'
' 全角文字を2バイト、半角文字を1バイトとして
' 文字列を半角座標で取り出す
'
Function GetStringForm(str, col, start, length)
b = General.GetStringForm(str, col, start, length, strSelect)
GetStringForm = strSelect
End Function
'''''スクリプトバージョン
Function GetStringFormBak(str, col, start, length)
alen=len(str)
co = 1
k = 1
do
if col = co then
exit do
end if
ret = InStr(k,str, chr(13)&chr(10), 0)
k=ret+2
co = co+1
loop while k 0 then
co = co + 1 '半角
else
co = co + 2 '全角
end if
kk = kk + 1
ln = ln + 1
loop while co <> length
exit do
end if
if Asc(Mid(str, k, 1)) > 0 then
co = co + 1 '半角
else
co = co + 2 '全角
end if
k = k+1
loop while Asc(Mid(str, k, 1)) <> 13
GetStringForm = Mid( str, k, ln)
End Function
|