| 
					 
							
													 
							
						 
						
 
 | 
 | 
 
2007/6/17(Sun) 12:00:37|NO.8982 
--------------------------------------ここから 
年年=今年     #(2000) 
月月=今月     #(2) 
日日=31
 
    s=「 http://table.yahoo.co.jp/t?c=2000&a=1&b=1&f=」&年年&「&d=」&月月&「&e=」&日日&「&g=d&s=998405.t&y=0&z=998405.t」#トピックス価格データ 
    sからHTTPデータ取得。それをSJIS変換。それを小文字変換。b=それ
 
a=0 
     50回 
           bの「<td><small>」から「</small></td>」まで範囲切り取る。「,」を「」に置換。倉庫【a,00】=それ。#年月日区切り 単語トピックス価格データ 
           bの「<td><small>」から「</small></td>」まで範囲切り取る。「,」を「」に置換。倉庫【a,01】=それ。#初値区切り   単語 
           bの「<td><small>」から「</small></td>」まで範囲切り取る。「,」を「」に置換。倉庫【a,02】=それ。#高値区切り   単語 
           bの「<td><small>」から「</small></td>」まで範囲切り取る。「,」を「」に置換。倉庫【a,03】=それ。#安値区切り   単語 
           bの「<td><small><b>」から「</b></small></td>」まで範囲切り取る。 「,」を「」に置換。倉庫【a,04】=それ。#終値区切り   単語 
                  a=a+1 
---------------------------------------ここまで 
上記を『なでしこ』にて起動しますと最新のトピックス 
年月日/初値/高値/安値/終値 
... 
... 
50日分が倉庫【a,00〜04】に入ります。 
このようなプログラムをHSPでつくりたいのですが 
できるのでしょうか?
 
できればデータ取得する簡単な書式を提示して 
頂ければ幸いです。m(__)m
  
 |   
  
 
 | 
 | 
 
2007/6/17(Sun) 12:42:07|NO.8983 
とりあえず、hspに付属の 
 
sampview.exe 
 
を実行して、 
サンプルのカテゴリを 
 
HSPINET 
 
にして、 
 
表示される物を見てみると良いんじゃね? 
 
 |   
  
| 
 | 
 
2007/6/17(Sun) 12:52:31|NO.8984 
なでしこ? なにそれ・・  
わざわざ、HSPでやる意味あんの? 
出来るか出来ないかは、あんたの腕次第だろ? 
 
その、なでしことやらができるんなら。 
 
 |   
  
| 
 | 
 
2007/6/17(Sun) 22:01:30|NO.9001 
吉竹さん、はじめまして。 
スクリプトを拝見する限りでは「なでしこ」のほうが格段に簡単にできるように思いますが、もちろんHSPでも可能です。
 
fさんの仰っているサンプルビューアでネットの接続方法は分かります。 
文字コード変換・小文字変換はモジュールがありますのでそれを利用されると良いでしょう。
 http://quasiquote.org/hspwiki/Module%3aTextproc
テキストの切り出しにはgetstr, instr, strmidなどを利用することになると思います。多少文字列操作の慣れが必要です。 
ループの使い方や配列変数の使い方など、基本的な事柄はご自分に合う講座などを探して学ばれることをお勧めします。
  
 |   
  
| 
 | 
 
2007/6/18(Mon) 12:03:00|NO.9011 
なんか 
「bの「<td><small>」から「</small></td>」まで範囲切り取る。」
 
て命令、凄く羨まし悔しかったので作ってみた(鬼 
使い方はちょっと違いそうだが。
  
#module
#defcfunc _strcut str kore , int bango , str kokokara , str kokomade
	base_str     = kore
	string_index = 0
	count        = 0
*lp1
	start_index = instr( base_str , string_index , kokokara )
	if start_index = -1 { return "" }
	else {
		count++
		if count <= bango {
			string_index += start_index + 1
			goto *lp1
		}
	}
	end_index   = instr( base_str , start_index + string_index , kokomade ) + strlen( kokomade )
	return strmid( base_str , start_index + string_index , end_index)
#global
	          //01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
	moto     = "123<td><small>abcdefg</small></td><td><small>123456</small></td><td><small>987\n   65</small></td><td><small>ABCDEFGEFGH</small></td>"
	hajimari = "<td><small>"
	owari    = "</small></td>"
	
	mes "[" + _strcut( moto , 0 , hajimari , owari ) + "]"
	mes "[" + _strcut( moto , 1 , hajimari , owari ) + "]"
	mes "[" + _strcut( moto , 2 , hajimari , owari ) + "]"
	mes "[" + _strcut( moto , 3 , hajimari , owari ) + "]"
	mes "[" + _strcut( moto , 4 , hajimari , owari ) + "]"
	stop
 
ちゃっちゃと作ったので、バグが潜んでるかもしれん。 
使う分には注意しろ。
  
 
  |    |   
  
| 
 | 
 
2007/6/18(Mon) 15:22:53|NO.9012 
> fさん
第2パラメータで何番目の該当文字列を取り出すか指定するのですね。 
バグは無いと思いますが、私だったらstart_index + 1はstart_index + strlen(kokokara)にするでしょうか。……趣味の問題ですね。今回のケースではどっちでも良いでしょう。
 
なお、余談ですが吉竹さんのために。 
結果にHTMLタグ("<td><small>"とか)を含めたくない場合は、19行目のreturnを
  
return strmid( base_str , start_index + string_index + strlen(kokokara) , end_index - strlen(kokokara) - strlen(kokomade))
 
とすればOKです。他にも良い方法はありますが、これが一番お手軽かと思います。
  
 |   
  
| 
 | 
 
2007/6/18(Mon) 16:01:48|NO.9013 
ああ、使い方からすれば「ここから」部分と「ここまで」部分は要らないんだな。 
これは失敬。 
 
 |   
  
| 
 | 
 
2007/6/18(Mon) 22:11:08|NO.9022 
Documentオブジェクト(HTMLDocument)を利用して 
必要なデータ部分を抜き出してみました。
  
#module
#define IID_IDispatch "{00020400-0000-0000-C000-000000000046}"
#uselib "urlmon.dll"
#func CreateURLMoniker "CreateURLMoniker" int, wstr, int
#uselib "ole32.dll"
#func BindMoniker "BindMoniker" comobj, int, int, int
#func IIDFromString "IIDFromString" wstr, var
#deffunc loadHTML var v, str url
// v = Documentオブジェクトを受け取る変数
// url = ロードするURL
	dimtype moniker, vartype("comobj"), 1
	dimtype doc, vartype("comobj"), 1
	CreateURLMoniker 0, url, varptr(moniker)
	if varuse(moniker) == 0 : return 	// モニカ作成失敗
	IIDFromString IID_IDispatch, iid
	BindMoniker moniker, 0, varptr(iid), varptr(doc)
	delcom moniker
	v = doc
	if varuse(v) : delcom doc
	return
#global
#include "user32.as"
	y = 2000
	m = 2
	d = 31
	url = "http://table.yahoo.co.jp/t?c=2000&a=1&b=1&f="+y+"&d="+m+"&e="+d+"&g=d&s=998405.t&y=0&z=998405.t"
	loadHTML doc, url
	if varuse(doc) == 0 : dialog "オブジェクト作成失敗" : end
	repeat
		wait 1
		if doc("readyState") == "complete" : break
		title "読み込み中"
	loop
	title "解析中"
	buf = ""
	comres colTR
	doc->"getElementsByTagName" "tr"	 // trのコレクション取得
	repeat colTR("length")
		tr = colTR("item", cnt)
		if varuse(tr) == 0 : 
		// 背景色が#ffffffのtrを列挙する
		if tr("bgcolor") == "#ffffff" {
			buf += tr("innerHTML") + "\n"
			count++
		}
		delcom tr
		if count == 50 : break	// 最大50日分
	loop
	delcom colTR
	delcom doc
	title "終了 : データ"+count+"日分"
	// 全て小文字に
	CharLowerBuff varptr(buf), strlen(buf)
	mesbox buf, ginfo_winx, ginfo_winy, 5
	stop
 
後は変数bufにfさんのモジュールを使うと簡単です。 
(,の置き換えはしてません)
  
 
  |    |   
  
| 
 | 
 
2007/6/18(Mon) 22:22:48|NO.9023 
なんかゴミが残ってた・・・。 
ループ内の
  
	if varuse(tr) == 0 : 
 
は消すか、
  
	if varuse(tr) == 0 : continue
 
にしてください。 
(消して問題ないと思います。)
  
 |   
  
| 
 | 
 
2007/7/7(Sat) 02:26:20|NO.9297 
age 
 
 |   
  
					 |