2008年9月9日火曜日

中山真敬:著 パソコン「書く力」が面白いほどつく本 その2

> 「構成」「書き出し」-これだけで印象はガラリと変わる
最近、たいして書き出し考えてないですねー
適当に書き出してますねー
でも、そんな書き出し下手なTACKにも
一つワザがあります

思い切れば、思い切るほど、なんとかなる
ホラこの文章も、内容が暗中模索なのになんとかなりそう
書き出しは考えませんが頭の中で構成は結構やってます
筋道を通して最後まで覗けないと文章書けません
以前は細部まで構成しすぎて時間が足りなくて足りなくて困っていました
構成をアバウトにしたら文章が雑になりました
でも、時間は足りなくないからいいけどさ

パソコン使って文章を書いているのに
パソコンを使わずに構成しているから困り者です

中山真敬:著 パソコン「書く力」が面白いほどつく本

文章力の本です
BOOK・OFFで興味をひかれて買いました
部分、部分のワザの効果が光っています

> 例えば、今日から、次の5つのコツを試してみて欲しい
> あなたの文章に必ずや、いい変化が生じるはずである
この言葉は、飾り言葉ではないです
著者が前書きで述べたこの言葉に
パソコン文章術の極意が詰まっています

> ①文章を書く前に、まず「5W1H」で考える
たぶん「5W1H」で考えるのは一文ごとじゃないです
一段落ごとに「5W1H」で考えてみるならば
効果はてき面かもしれません
特に物語、シナリオ、小説を書いてみよう
そんな時(僕の場合、シナリオ)必須そうな気がします
さらにこれは「考える力」をマスターするためのコツだそうです

> ②「文章の結論」から「書き出し」をどうするか考える
「文章の結論」まで考えて、そこで初めて「書き出し」を考える資格を
得られる。という話かもしれません
もちろん章だてで考えているのなら章の結論を考えるごとに
章の書き出しを考えるという作業でもよいのかもしれませんが
さらにこれは「構成する力」をマスターするためのコツだそうです

> ③「自分が伝えたい情報」より「相手が欲しい情報」を考える
TACKの場合、だいたい「自分が伝えたい情報」ありきで文章を書いていますが
「相手が欲しい情報」とは何ぞや?などと考えたこともありません
自分の興味のある情報ならきっと興味のある人もいるだろうだなんて考えています
提示する情報を選べるほど引き出しも広くないですし...
ちなみにこれは「読ませる力」をマスターするためのコツだそうです

> ④伝えたいことは「効果的に三度」繰り返す
さすがの短い文章ばかり書いている自己中なTACKも
三度繰り返したりはしないです
似たような表現のられつはよくしますが...
でもこの考え方には共感していて
覚えておきたいことは三度読み返す。を読書の信条にしています
ちなみにこれは「アピールする力」をマスターするためのコツだそうです

> ⑤「打ち合わせの内容をまとめる習慣をつける」
TACKはフリーターなので打ち合わせはそんなにしないです
でも本の内容をまとめたり、考えていることをまとめたり
応用範囲の広そうなワザですね
ちなみにこれは「情報を整理する力」をマスターするためのコツだそうです

2008年8月22日金曜日

テキストFILEの更新 ver02

データに決まった内容を書き込むサンプルスクリプトはできましたが
今度は入力した内容をデータに書き込みます

変更前のテキストFILE
FILE名:dat\\y_tack_page.txt
NO.001
TITLE:ずざざん ざん♪
URL :http://space.geocities.jp/digital_clock_2006
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:
NO.002
TITLE:TACK BLOG
URL :http://space.geocities.yahoo.co.jp/gl/digital_clock_2006
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:
NO.003
TITLE:ブログを ずざざん ざん♪
URL :http://ytack.blogspot.com/
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:


テキストFILEの更新のスクリプトver02

以前作成したdiv_strモジュールを使用しています
#include "FILE_div_str.hsp"

bt_str_01="NO.001"
bt_str_02="NO.002"
bt_str_03="NO.003"

sl_bt_str_01="→NO.001"
sl_bt_str_02="→NO.002"
sl_bt_str_03="→NO.003"
sl_NO=1

bt_cmd_str_01="項目"
bt_cmd_str_02="TEXT"

sl_bt_cmd_str_01="→項目"
sl_bt_cmd_str_02="→TEXT"
sl_CMD=1

sdim s_title,1000
s_title=""
sdim s_url ,1000
s_url=""
sdim s_memo ,2000
s_memo=""
t_null ="TITLE:\nURL :\nmemo1:\nmemo2:\nmemo3:\n"
t_null+="memo4:\nmemo5:\nmemo6:\nmemo7:"
sdim s_text ,4000
s_text=t_null

sdim to_chg_topic,4,256
to_chg_topic.1="HSPTV!"
to_chg_topic.2="http://hsp.tv/"
to_chg_topic.3="ONION software"

sdim to_chg_text,10,256
to_chg_text.1="TITLE:HSPTV!"
to_chg_text.2="URL :http://hsp.tv/"
to_chg_text.3="memo1:ONION software"
to_chg_text.4="memo2:"
to_chg_text.5="memo3:"
to_chg_text.6="memo4:"
to_chg_text.7="memo5:"
to_chg_text.8="memo6:"
to_chg_text.9="memo7:"

gosub *ld_dat
gosub *set_topic_pre

*begin
cls 0
gosub *draw_button
if sl_CMD==1{ gosub *draw_topic }
if sl_CMD==2{ gosub *draw_text }
stop

*set_topic_pre
if sl_NO==1:i=1
if sl_NO==2:i=11
if sl_NO==3:i=21
s=""
gosub *get_inside
s_title=t
i++
gosub *get_inside
s_url=t
i++
s_memo=""
repeat 7
gosub *get_inside
s_memo+=t
i++
loop
return

*get_inside
noteget s,i
l=strlen(s)
l-=6
t=strmid(s,6,l)
return

*set_text_pre
if sl_NO==1:i=1
if sl_NO==2:i=11
if sl_NO==3:i=21
s_text=""
s=""
repeat 9,i
noteget s,cnt
s_text+=s+"\n"
loop
return

*set_topic_tmp
s_title=to_chg_topic.1
s_url =to_chg_topic.2
s_memo =to_chg_topic.3
return

*set_text_tmp
s_text=""
repeat 9,1
s_text+=to_chg_text.cnt+"\n"
loop
return

*draw_text
pos 120,25
mesbox s_text,480,450,1,-1
return

*draw_topic
pos 120,25
mes "title"
mesbox s_title,360,40,1,-1
mes "URL"
mesbox s_url,360,100,1,-1
mes "memo"
mesbox s_memo,360,250,1,-1
return

*draw_button
objsize 120.25
pos 0,0
if sl_CMD==1{
button sl_bt_cmd_str_01,*cmd01 }
else{ button bt_cmd_str_01,*cmd01 }
if sl_CMD==2{
button sl_bt_cmd_str_02,*cmd02 }
else{ button bt_cmd_str_02,*cmd02 }
button "tmplate挿入",*cmd_insert
button "更新",*cmd_chg
button "RESET",*cmd_reset
button "LOAD",*cmd_load
pos 120,0
if sl_NO==1{
button sl_bt_str_01,*sl_1 }
else{ button bt_str_01,*sl_1 }
pos 240,0
if sl_NO==2{
button sl_bt_str_02,*sl_2 }
else{ button bt_str_02,*sl_2 }
pos 360,0
if sl_NO==3{
button sl_bt_str_03,*sl_3 }
else{ button bt_str_03,*sl_3 }
return

*sl_1
sl_NO=1
goto *set_dat
*sl_2
sl_NO=2
goto *set_dat
*sl_3
sl_NO=3
goto *set_dat

*set_dat
if sl_CMD==1{ gosub *set_topic_pre }
if sl_CMD==2{ gosub *set_text_pre }
goto *begin

*cmd01
sl_CMD=1
goto *set_dat
*cmd02
sl_CMD=2
goto *set_dat

*cmd_insert
if sl_CMD==1{ gosub *set_topic_tmp }
if sl_CMD==2{ gosub *set_text_tmp }
goto *begin

*ld_dat
sdim dat,1024
notesel dat
noteload "dat\\y_tack_page.txt"
return

*cmd_chg
if sl_CMD==1{ gosub *topic2text}
if sl_CMD==2{ gosub *mb2text}
stop
*topic2text
s = "TITLE:"+div_one_at_div_str(s_title)
t = "URL :"+div_one_at_div_str(s_url)

init_at_div_str 16
set_str_at_div_str s_memo
div_str_at_div_str 16
if sl_NO==1:i=1
if sl_NO==2:i=11
if sl_NO==3:i=21
noteadd s,i,1 :i++
noteadd t,i,1 :i++
j=3
k=1
repeat 7,i
noteadd ("memo"+k+":"+get_str(j)),cnt,1
j++
k++
loop
notesave "dat\\chg_dat.dat"
exec "notepad dat\\chg_dat.dat"
stop

*mb2text
init_at_div_str 16
set_str_at_div_str s_text
div_str_at_div_str 16
if sl_NO==1:i=1
if sl_NO==2:i=11
if sl_NO==3:i=21
j=1
repeat 9,i
noteadd get_str(j),cnt,1
j++
loop
notesave "dat\\chg_dat.dat"
exec "notepad dat\\chg_dat.dat"
stop

*cmd_load
sdim dat,2048
notesel dat
noteload "dat\\chg_dat.dat"
goto *set_dat

*cmd_reset
gosub *ld_dat
goto *set_dat

ToDoリストによるとまだまだ
作成すべき機能もありますが
サンプルスクリプトも作成するのがめんどうなので
サンプルスクリプトの作成は一段落させて
本体のスクリプトを作成していこうと思います

2008年8月21日木曜日

文字列を改行での分割モジュールver02:テストコード

テストコードA
#include "FILE_div_str.hsp"

string_1="1ab\n\n3cd\n4ef\n\n6gh\n7ij\n8kl";c=8
string_2="1ab\n\n3cd\n4ef";c=4
string_3="1ab\n\n3cd\n4ef\n";c=5
string_4="1\n2\n3\n4\n5\n\n7\n8\n\n10\n11\n"

init_at_div_str 16
set_str_at_div_str string_1
div_str_at_div_str 10

logmes "1a:"+get_str(1)
logmes "2a:"+get_str(2)
logmes "3a:"+get_str(3)
logmes "4a:"+get_str(4)
logmes "5a:"+get_str(5)
logmes "6a:"+get_str(6)
logmes "7a:"+get_str(7)
logmes "8a:"+get_str(8)

init_at_div_str 16
set_str_at_div_str string_2
div_str_at_div_str 4

logmes "1b:"+get_str(1)
logmes "2b:"+get_str(2)
logmes "3b:"+get_str(3)
logmes "4b:"+get_str(4)
logmes "5b:"+get_str(5)
logmes "6b:"+get_str(6)
logmes "7b:"+get_str(7)
logmes "8b:"+get_str(8)

init_at_div_str 8
set_str_at_div_str string_3
div_str_at_div_str 10

logmes "1c:"+get_str(1)
logmes "2c:"+get_str(2)
logmes "3c:"+get_str(3)
logmes "4c:"+get_str(4)
logmes "5c:"+get_str(5)
logmes "6c:"+get_str(6)
logmes "7c:"+get_str(7)
logmes "8c:"+get_str(8)

init_at_div_str 16
set_str_at_div_str string_4
div_str_at_div_str 16

logmes "1d:"+get_str(1)
logmes "2d:"+get_str(2)
logmes "3d:"+get_str(3)
logmes "4d:"+get_str(4)
logmes "5d:"+get_str(5)
logmes "6d:"+get_str(6)
logmes "7d:"+get_str(7)
logmes "8d:"+get_str(8)
logmes "9d:"+get_str(9)
logmes "10d:"+get_str(10)
logmes "11d:"+get_str(11)
logmes "12d:"+get_str(12)
logmes "13d:"+get_str(13)
logmes "14d:"+get_str(14)
logmes "15d:"+get_str(15)
logmes "16d:"+get_str(16)
stop


テストコードB
#include "FILE_div_str.hsp"
sdim word,4096

repeat 1000,1
if cnt\10==9{word+="\n"}
else{word+=str(cnt)+"\n"}
loop

init_at_div_str 2048
set_str_at_div_str word
div_str_at_div_str 1000

repeat 1000,1
logmes str(cnt)+":"+get_str(cnt)
loop
stop

文字列を改行での分割モジュールver02

分割は一行か七行と決めうちして、モジュールを作成したのですが
十行の分割がやりたくなったので
何行の分割もできるようにモジュールを改造しました

FILE名:FILE_div_str.hsp
#module div_str
/* グローバル変数
変数
max_ar ar_locとar_sの配列の最大
index 分割した数
string 分割する文字列
len Stringの長さ

配列
ar_loc \nの場所
ar_s 分割した文字列を格納
**/

// グローバル変数の初期化
#deffunc init_at_div_str int max
max_ar=max
dim ar_loc,max
sdim ar_s,max,256
sdim string,1024
index=0
return

// setter
#deffunc set_str_at_div_str str p
string=p
len=strlen(string)
return

// getter
#defcfunc get_str int p
if p>index:return ""
return ar_s.p

// 文字列分割
#deffunc div_str_at_div_str int div_num
num=0
if div_num>=max_ar{count=max_ar}
else{count=div_num}
count--

// \nの位置を調べて配列にar_loc\nの位置を格納
num++
if instr(string,ar_loc.0,"\n")==-1{ar_loc.1=-1}
else{ ar_loc.1=instr(string,ar_loc.0,"\n")+2}
repeat count,1
tmp=cnt+1
num++
if instr(string,ar_loc.cnt,"\n")==-1{ar_loc.tmp=-1:break}
else{ ar_loc.tmp=instr(string,ar_loc.cnt,"\n")+ar_loc.cnt+2 }
loop
index=num

// 一つ目の\nの位置までの文字列を配列ar_sに格納
if num>=1{
hoge=ar_loc.1-2
ar_s.1=strmid(string,0,hoge)
}

// \nの位置から次の\nの位置までの文字列を配列ar_sに格納
repeat count,1
n=cnt+1
if (num>=n)&(ar_loc.cnt!=-1){
hoge=ar_loc.n-ar_loc.cnt-2
ar_s.n=strmid(string,ar_loc.cnt,hoge)
}
loop

// 文字列に\nが含まれてないので、文字列を配列ar_sに格納
if ar_loc.1==-1{
ar_s.1=string
}

// 最後の\nの位置から、文字列の最後までを配列ar_sに格納
repeat count,1
nn=cnt+1
if ar_loc.nn==-1{
hoge=len-ar_loc.cnt
ar_s.nn=strmid(string,-1,hoge)
break
;mes nn ;コメントアウト
}
loop
return

// 複数行の文字列から、最初の一行
// 単一行の文字列であれば文字列全部を返す
#defcfunc div_one_at_div_str var pre
loc=instr(pre,0,"\n")
if loc==-1:return pre
return strmid(pre,0,loc)

#global

2008年8月20日水曜日

テキストFILEの更新

データの編集操作の一環で
データに決まった内容を書き込みます

データに書き込むのは
決まってない内容ですが
まずは決まった内容を書き込むスクリプトを書いてみました

変更前のテキストFILE
FILE名:dat\\y_tack_page.txt
NO.001
TITLE:ずざざん ざん♪
URL :http://space.geocities.jp/digital_clock_2006
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:
NO.002
TITLE:TACK BLOG
URL :http://space.geocities.yahoo.co.jp/gl/digital_clock_2006
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:
NO.003
TITLE:ブログを ずざざん ざん♪
URL :http://ytack.blogspot.com/
memo1:author
memo2:y.tack
memo3:
memo4:
memo5:
memo6:
memo7:


そして、テキストFILEの更新のスクリプト
// 変更用文字列を配列で用意
sdim to_chg,10,256
to_chg.1="TITLE:HSPTV!"
to_chg.2="URL :http://hsp.tv/"
to_chg.3="memo1:ONION software"
to_chg.4="memo2:"
to_chg.5="memo3:"
to_chg.6="memo4:"
to_chg.7="memo5:"
to_chg.8="memo6:"
to_chg.9="memo7:"

*begin
mes "何番のデータを更新しますか?"
button "NO.001",*chg_001
button "NO.002",*chg_002
button "NO.003",*chg_003
stop

// 変更前dat読み込み
*ld_dat
sdim dat,1024
notesel dat
noteload "dat\\y_tack_page.txt"
return

// ボタンAを押した時の処理
*chg_001
gosub *ld_dat
i=0
goto *chg_func

// ボタンBを押した時の処理
*chg_002
gosub *ld_dat
i=10
goto *chg_func

// ボタンCを押した時の処理
*chg_003
gosub *ld_dat
i=20
goto *chg_func

// datの書き換え
*chg_func
repeat 9,1
j=i+cnt
noteadd to_chg.cnt,j,1
loop

// datを保存して、それをnotepadで開く
notesave "dat\\changed_dat.txt"
exec "notepad dat\\changed_dat.txt"
stop

2008年8月19日火曜日

文字列を改行での分割モジュール

複数行入力されることが予想される
入力された文字列から一行もしくは七行
改行文字で分割した文字列を配列に格納するための
文字列の分割モジュールです
分割して取得する行数は一行か七行と決め打ちしているので
拡張性は考えていません

確か開発wikiに分割モジュールがあった気がしますが
文字列処理は好きな分野なので
面白半分でモジュールを作成してみました

注:スクリプトは変更したので削除

シンプルな文字列操作

簡単なテストで文字列操作のやり方がわかってきたところで関数を一つ
文字列の中に\nがあればそれ以前
文字列の中に\nがなければ文字列全部
を返す関数を作ってみました
複数行の文字列から、最初の一行
単一行の文字列であれば文字列全部を返す関数です
goto *@f
#defcfunc div_one var pre
loc=instr(pre,0,"\n")
if loc==-1:return pre
return strmid(pre,0,loc)
*@
s="123\n45"
logmes "s:"+div_one(s)
t="12345"
logmes "t:"+div_one(t)
stop

シンプルな関数ですが意外と使い道がありそう

そうそう。久しぶりに実験室を更新しました

button命令による割り込み時の繰り返し命令の動作

簡単な文字列操作のテスト

久しぶりにTACK Local Linksの開発です
今回の目標はデータファイルを入力する文字列群で更新することです

そのために、まずは複数行文字列を\nで分割して
文字列配列に格納したいです

文字列の分割の前に、文字列操作関数の復習から

// \nの位置を調べる
s="abc\ndef"
loc=instr(s,0,"\n")
logmes str(loc)

// 文字列sを\nで二つに区切る
l=strlen(s)
l-=loc+2
t=strmid(s,0,loc)
u=strmid(s,(loc+2),l)
logmes t
logmes u
stop

2008年8月13日水曜日

サイトのデザイン変更しました

tytyさんのアドバイスを参考にサイトのデザインを変更しました
変更箇所が広範囲というか
ほぼサイト全域に及んでいて、変更はめんどくさかったんですけど
ジオシティーの更新ツールが便利で
案外、簡単に更新できました

白や黒はありきたりで嫌だったので
灰色を基調にデザインしてみました
大分、見やすくなったと思うけれど
まだ見にくい。という意見があれば
白か黒を基調にデザインの変更を行うので
ゲストブックにでも書き込んでください

それと、今までみやすい配色を行うという視点が欠けていて
自分の好きな色ばかり使っていたことをお詫び致します
どうもすみませんでした

僕のサイトはスクリプトを参考にしたいというより
こんなスクリプト書いたんだぜー。というような
スクリプトの発表の場であり
単なる自己満足のためでもあり
あんまり、参考にして欲しくて書いている訳ではありません

参考にすべきサイトは他にたくさんあり
そのようなサイトを参考にして
僕のスクリプトはちょろっと見る程度でかまわない
というスタンスです
でもやっぱり僕のスクリプトも参考にして欲しい気持ちもあり
そんな矛盾にはさまれていたりします

特にブログにスクリプトやToDoリストを書くのは
wikiに書きながらスクリプトを書いていくように
自分で眺めながら開発するという趣旨が強いです

それから、最近、自分のサイトのバナーを書いてから
少し、LINK活動をしています
自分のサイトより参考になるサイトは
たくさんあることは強く認識しているので
そのうちLINKも充実させたいです
といってもLINKは
自分でたくさん集めるよりも
LINK集の充実しているサイトからジャンプする方が
効率的なのも知っているので
そういうことを視野に入れながら、増やしていきたいです