2002.03.09 更新
1.要素の指定
2.文字・整列・列 2000.04.22
3.文字・整列・行 2000.04.22
4.ライン入力・既存文字利用2000.05.21
5.文字列の連結
2000.05.21
(パラメータが必要です。引用する文字列を [0]で複写連結/[1]で移動連結します。)
6.規定値ライン
2000.07.02
7.黄色線
2000.07.02
8.水
平アンダーライン2000.07.02
9.引き出し線の描画 2000.07.02
10.水平引き出し線 2000.07.02
** ファイルデータの書き込み **
11.方向判断2
002.04.24
2002.03.022
12.テキスト・ファイルデータの1列書き込み
2002.03.02
13.ファイルデータ利用の書き込みの使い方2002.03.02
14.テキスト・ファイルデータの書き込み2002.03.09
2002.03.02
** 表ファイルデータの書き込み **
15.表への文字列の書き込みの使い方2002.03.09
(図内のパーツリストの文字データを表計算ソフトで作成し、書き込むことが出来ます。)
16.普通列データの取得2002.03.09
17.コンマ内包データの取得2002.03.09
18.残りのデータを得る2002.03.09
19.データの切り出し 2>002.03.09
20.テキスト・CSVファイルデータの書き込み
2002.03.09
DEFINE Ma_text_designate
LOCAL Point_temp
LOOP
READ PNT '**
テキストを指示して下さい。
**' Point_temp
INQ_ELEM
Point_temp
{要素情報の取得}
EXIT_IF ((INQ 403) = TEXT)
END_LOOP
END_DEFINE
DEFINE Ma_text_row_up
LOCAL
Point_00
{移動する位置}
LOCAL
Point_01
{BOX角位置}
LOCAL
Point_02
{BOX角位置}
LOCAL
Point_03
{揃える位置}
LOCAL
Point_03X
{揃える位置 X}
LOCAL
KAZ
{要素の数}
LOOP
LOOP
READ PNT '**
位置を揃える、文字列を箱指定して下さい。[ESC]キーで終了
**' Point_01
READ PNT '**
位置を揃える、文字列を箱指定して下さい。[ESC]キーで終了
**' RUBBER_BOX Point_01 Point_02
INQ_SELECTED_ELEM BOX
Point_01 Point_02
LET KAZ (INQ
14)
{要素の数}
LOOP
EXIT_IF (((INQ 403) = TEXT)
OR (KAZ
= 0))
LET KAZ (KAZ -
1)
INQ_NEXT_ELEM
{次の要素}
END_LOOP
EXIT_IF ((INQ 403) =
TEXT)
{テキストが有るなら次へ}
END_LOOP
READ PNT '**
揃える鉛直位置を指定して下さい。(文字の原点を基準に揃えます。)[ESC]キーで終了
**' Point_03
LET Point_03X (X_OF Point_03)
INQ_SELECTED_ELEM BOX Point_01
Point_02
LET KAZ (INQ
14)
{要素の数}
LOOP
IF ((INQ 403) = TEXT)
LET Point_00
(PNT_XY
Point_03X (Y_OF (INQ 101))) {移動位置}
MODIFY (INQ
101) DEL_OLD
MOVE TWO_PTS (INQ 101) Point_00
END_IF
LET KAZ (KAZ - 1)
EXIT_IF (KAZ = 0)
INQ_NEXT_ELEM
{次の要素}
END_LOOP
END_LOOP
END_DEFINE
DEFINE Ma_text_rank_up
LOCAL
Point_00
{移動する位置}
LOCAL
Point_01
{BOX角位置}
LOCAL
Point_02
{BOX角位置}
LOCAL
Point_03
{揃える位置}
LOCAL
Point_03Y
{揃える位置 Y}
LOCAL
KAZ
{要素の数}
LOOP
LOOP
READ PNT '**
位置を揃える、文字列を箱指定して下さい。[ESC]キーで終了
**' Point_01
READ PNT '**
位置を揃える、文字列を箱指定して下さい。[ESC]キーで終了
**' RUBBER_BOX Point_01 Point_02
INQ_SELECTED_ELEM BOX
Point_01 Point_02
LET KAZ (INQ
14)
{要素の数}
LOOP
EXIT_IF (((INQ 403) = TEXT)
OR (KAZ
= 0))
LET KAZ (KAZ -
1)
INQ_NEXT_ELEM
{次の要素}
END_LOOP
EXIT_IF ((INQ 403) =
TEXT)
{テキストが有るなら次へ}
END_LOOP
READ PNT '**
揃える水平位置を指定して下さい。(文字の原点を基準に揃えます。)[ESC]キーで終了
**' Point_03
LET Point_03Y (Y_OF Point_03)
INQ_SELECTED_ELEM BOX Point_01
Point_02
LET KAZ (INQ
14)
{要素の数}
LOOP
IF ((INQ 403) = TEXT)
LET Point_00
(PNT_XY
(X_OF (INQ 101)) Point_03Y) {移動位置}
MODIFY (INQ
101) DEL_OLD
MOVE TWO_PTS (INQ 101) Point_00
END_IF
LET KAZ (KAZ - 1)
EXIT_IF (KAZ = 0)
INQ_NEXT_ELEM
{次の要素}
END_LOOP
END_LOOP
END_DEFINE
DEFINE Ma_text_in_edit
LOCAL Word00
LOCAL Word01
LOCAL Position
Ma_text_designate
{テキストの指定}
LET Word00 (INQ
902)
{文字列の取得}
READ STRING '** 文字列を編集して下さい。 **' DEFAULT Word00
Word01
READ PNT '** 記入位置を指示して下さい。 **' Position
TEXT Word01 Position
ASSIST
{記入}
END_DEFINE
DEFINE Ma_unite
PARAMETER
Erase
{引用文字の削除=1}
LOCAL
Txet_modify_point
{変更文字列の指示位置}
LOCAL
Txet_modify_text
{変更する文字列}
LOCAL
Txet_modify_locate
{変更文字列の位置}
LOCAL
Txet_modify_angle
{文字列の角度}
LOCAL
Txet_quotation
{引用する文字列}
LOCAL
Txet_quotation_locate
{引用文字列の位置}
LOCAL
Txet_write
{取り替える文字}
LOCAL
F_or_r_locate
{文字の付加位置用}
LOCAL
F_or_r_angle
{原点からの方向}
LOCAL
Write_locate
{書き込む位置}
{現在の環境用}
LOCAL
Txet_color_standard
{文字列の色}
LOCAL
Txet_origin_standard
{文字列原点位置}
LOCAL
Txet_pace_standard
{文字列の行間隔}
LOCAL
Txet_ratio_standard
{比率(幅/高さ)}
LOCAL
Txet_size_standard
{文字列の高さ}
LOCAL
Txet_inclination_standard
{文字列の傾斜角}
LOCAL
Txet_angle_standard
{文字列の角度}
LOCAL
Txet_font1_standard
{1バイト書体名}
LOCAL
Txet_font2_standard
{2バイト書体名}
LOCAL
Txet_frame_standard
{文字列の枠}
LOCAL
Txet_paint_standard
{塗りつぶし}
LOCAL
Angle_unit
{ラディアンへの変換値}
{ 現在の環境の記憶}
INQ_ENV 3
LET Txet_color_standard (INQ
203)
{文字列の色}
INQ_ENV 12
LET Txet_origin_standard (INQ
3)
{文字列原点位置}
LET Txet_pace_standard (INQ
4)
{文字列の行間隔}
LET Txet_ratio_standard (INQ
5)
{比率(幅/高さ)}
LET Txet_size_standard (INQ
6)
{文字列の高さ}
LET Txet_inclination_standard (INQ
7)
{文字列の傾斜角}
LET Txet_angle_standard (INQ
8)
{文字列の角度}
LET Txet_font1_standard (INQ
302)
{1バイト書体名}
LET Txet_font2_standard (INQ
303)
{2バイト書体名}
LET Txet_frame_standard (INQ
601)
{文字列の枠}
LET Txet_paint_standard (INQ
602)
{塗りつぶし}
INQ_ENV 6
LET Angle_unit (INQ
3)
{ラディアンへの変換値}
LOOP
READ PNT '** 連結変更する文字列を指示して下さい。
**' Txet_modify_point
INQ_ELEM
Txet_modify_point
{要素情報の取得}
EXIT_IF ((INQ 403) =
TEXT)
{文字列なら}
END_LOOP
LET Txet_modify_locate (INQ
101)
{変更文字列の位置}
LET Txet_modify_text (INQ
902)
{変更する文字列}
LET Txet_modify_angle ((INQ 8) *
Angle_unit)
{文字列の角度}
IF (Txet_modify_angle < 0)
LET Txet_modify_angle (2 * PI +
Txet_modify_angle)
END_IF
IF (Erase = 1)
LOOP
READ PNT '**
移動してくる文字列を指示して下さい。
**' Txet_quotation_locate
INQ_ELEM
Txet_quotation_locate
{要素情報の取得}
EXIT_IF ((INQ 403) =
TEXT)
{文字列なら}
END_LOOP
ELSE
LOOP
READ PNT '**
コビーしてくる文字列を指示して下さい。
**' Txet_quotation_locate
INQ_ELEM
Txet_quotation_locate
{要素情報の取得}
EXIT_IF ((INQ 403) =
TEXT)
{文字列なら}
END_LOOP
END_IF
LET Txet_quotation (INQ
902)
{引用する文字列}
READ PNT '**
連結する方向を指示して下さい。(文字列の前方指示で先頭、後方指示で後方に連結します。)
**' F_or_r_locate
LET F_or_r_angle ((ANG (F_or_r_locate -
Txet_modify_locate))
* Angle_unit) {ラディアン表示}
IF (F_or_r_angle < 0)
LET F_or_r_angle (2 * PI +
F_or_r_angle)
END_IF
LET F_or_r_angle (F_or_r_angle - Txet_modify_angle
- (PI
/ 2)) {文字列の傾きを基準にする}
IF (F_or_r_angle < 0)
LET F_or_r_angle (2 * PI +
F_or_r_angle)
END_IF
{ 書き込み文字列の作成}
IF (F_or_r_angle <
PI)
{先頭なら}
LET Txet_write (Txet_quotation +
Txet_modify_text)
ELSE
{後方なら}
LET Txet_write (Txet_modify_text +
Txet_quotation)
END_IF
READ PNT '** 書き込む位置を指示して下さい。 **' Write_locate
{ 変更文字列と同じ位置ですか}
INQ_ELEM
Write_locate
{要素情報の取得}
IF ((INQ 14) =
1)
{1要素なら}
IF (((INQ 403) = TEXT) AND ((INQ 101) =
Txet_modify_locate))
LET Write_locate
Txet_modify_locate
END_IF
ELSE_IF ((INQ 14) >
1)
{多要素なら}
LOOP
IF (((INQ 403) = TEXT) AND
((INQ
101) = Txet_modify_locate)) {同じなら}
LET
Write_locate Txet_modify_locate
END_IF
EXIT_IF (((INQ 403) = TEXT) AND ((INQ
101) =
Txet_modify_locate) OR ((INQ 14) = 1))
INQ_NEXT_ELEM
END_LOOP
END_IF
GET_PROPERTIES
Txet_modify_point
{要素の特性の取得変更}
IF (Write_locate =
Txet_modify_locate)
{上書きなら}
DELETE Txet_modify_point
END
{前の文字列を削除}
END_IF
TEXT Txet_write Write_locate
END
{書き込み}
IF (Erase =
1)
{引用文字の削除なら}
DELETE Txet_quotation_locate
END
{引用文字列を削除}
END_IF
{ 復元}
TEXT COLOR Txet_color_standard
END
{文字列の色}
CURRENT_FONT
Txet_font1_standard
{1バイト書体名}
TEXT_ADJUST
Txet_origin_standard
{文字列原点位置}
TEXT_ANGLE
Txet_inclination_standard
{文字列の傾斜角}
TEXT_FILL
Txet_paint_standard
{塗りつぶし}
TEXT_FRAME
Txet_frame_standard
{文字列の枠}
TEXT_LINESPACE
Txet_pace_standard
{文字列の行間隔}
TEXT_RATIO
Txet_ratio_standard
{比率(幅/高さ)}
TEXT_SIZE
Txet_size_standard
{文字列の高さ}
TEXT_SLANT
Txet_inclination_standard
{文字列の傾斜角}
END_DEFINE
DEFINE Ma_yellow_line
END
END
COLOR YELLOW
LINEPATTERN SOLID
END_DEFINE
DEFINE Ma_underline
LOCAL
Lo_scale
{尺度}
LOCAL
Lo_point1
{要素指定点}
LOCAL
Lo_form
{要素タイプ}
LOCAL
Lo_center
{原点番号}
LOCAL
Lo_ratio
{比率}
LOCAL
Lo_height
{文字高さ}
LOCAL
Lo_address
{原点位置}
LOCAL Lo_address_x
LOCAL Lo_address_y
LOCAL
Lo_word
{文字列}
LOCAL
Lo_word_len
{文字列の長さ}
LOCAL
Lo_point_l_x
{左下}
LOCAL Lo_point_l_y
LOCAL
Lo_point_r_x
{右下}
LOCAL Lo_point_r_y
LOCAL
Lo_line_start
{開始点}
LOCAL
Lo_line_end
{終了点}
LOCAL Lo_sirusi
LOCAL
Lo_point2
{始点}
LOCAL Lo_point2_x
LOCAL
Lo_point3
{終点}
LOCAL Lo_point3_x
INQ_ENV 6
LET Lo_scale (INQ
4)
{尺度}
{文字列の取得}
LET Lo_sirusi 0
LOOP
READ PNT '** アンダーラインを引く文字を指定指定して下さい。
**' Lo_point1
INQ_SELECTED_ELEM
Lo_point1
{要素データを取得}
LET Lo_form (INQ
403)
{要素タイプ}
IF (Lo_form = TEXT)
LET Lo_sirusi 1
ELSE_IF ((INQ 14) =
0)
{無くなれば}
ELSE
LOOP
INQ_NEXT_ELEM
{次}
LET Lo_form
(INQ 403)
IF (Lo_form =
TEXT)
LET
Lo_sirusi
1
END_IF
EXIT_IF (Lo_sirusi = 1)
EXIT_IF ((INQ 14) = 0)
END_LOOP
END_IF
EXIT_IF (Lo_sirusi = 1)
END_LOOP
{データの取得}
LET Lo_center (INQ
3)
{原点番号}
LET Lo_ratio (INQ
5)
{比率}
LET Lo_height (INQ
6)
{文字高さ}
LET Lo_address (INQ
101)
{原点位置}
LET Lo_word (INQ
902)
{文字列}
LET Lo_word_len (LEN
Lo_word)
{文字列の長さ}
LET Lo_address_x (X_OF Lo_address)
LET Lo_address_y (Y_OF Lo_address)
{X方向}
IF ((Lo_center = 1) OR (Lo_center = 4) OR
(Lo_center =
7))
{左なら}
LET Lo_point_l_x Lo_address_x
LET Lo_point_r_x (Lo_address_x +
(Lo_height
* Lo_ratio * Lo_word_len) / Lo_scale)
ELSE_IF ((Lo_center = 2) OR (Lo_center = 5) OR
(Lo_center
= 8)) {中なら}
LET Lo_point_l_x (Lo_address_x -
((Lo_height
* Lo_ratio * Lo_word_len) / 2 ) / Lo_scale)
LET Lo_point_r_x (Lo_address_x +
((Lo_height
* Lo_ratio * Lo_word_len) / 2 ) / Lo_scale)
ELSE
{右なら}
LET Lo_point_l_x (Lo_address_x -
(Lo_height
* Lo_ratio * Lo_word_len) / Lo_scale)
LET Lo_point_r_x Lo_address_x
END_IF
{Y方向}
IF ((Lo_center = 7) OR (Lo_center = 8) OR
(Lo_center =
9))
{上なら}
LET Lo_point_l_y (Lo_address_y -
Lo_height)
ELSE_IF ((Lo_center = 4) OR (Lo_center = 5) OR
(Lo_center
= 6)) {中なら}
LET Lo_point_l_y (Lo_address_y -
Lo_height /
2)
ELSE
{下なら}
LET Lo_point_l_y Lo_address_y
END_IF
LET Lo_point_r_y Lo_point_l_y
{ラインのデータ取得}
READ PNT '** アンダーラインの始まる位置を、クリックしてください。**'
Lo_point2
LET Lo_point2_x (X_OF Lo_point2)
LET Lo_line_start (PNT_XY (Lo_point2_x)
(Lo_point_l_y -
(3 / Lo_scale))) {開始点・文字芯から3o下}
READ PNT '** アンダーラインの終わる位置を、クリックしてください。**'
RUBBER_LINE_HORIZONTAL Lo_line_start Lo_point3
LET Lo_point3_x (X_OF Lo_point3)
LET Lo_line_end (PNT_XY (Lo_point3_x) (Lo_point_r_y
- (3
/ Lo_scale))) {終了点・文字芯から3o下}
Ma_yellow_line
{黄色線}
LINE HORIZONTAL Lo_line_start Lo_line_end
Ma_standard_line
{規定値ライン}
END
END_DEFINE
DEFINE Leader_draw
PARAMETER P1
PARAMETER P2
PARAMETER Length
PARAMETER Direction
UNITS DEG
UNITS MM
COLOR
YELLOW
LINEPATTERN SOLID
ADD_CURRENT_INFO 'Leaders'
LEADER_LINE (P2 + (PNT_RA Length (90 * (Direction -
1))))
P2 P1 END
CHANGE_CURRENT_INFO 'Leaders' ''
TEXT CYAN END
END_DEFINE
DEFINE Leader_input
LOCAL P1
LOCAL P2
LOCAL P3
LOCAL P4
LOCAL
Length
{ライン長}
LOCAL
Direction
{描画方向}
LINEPATTERN SOLID
READ PNT '引き出し点を指示してください.' P1
READ PNT '文字の始まる位置をピックしてください.' RUBBER_LINE
P1 P2
READ PNT '文字の終わる位置をピックしてください.'
RUBBER_LINE_HORIZONTAL
P2 P4
LET Length (ABS (X_OF P4 - X_OF P2))
IF ((X_OF P4) > (X_OF P2))
LET Direction 1
ELSE
LET Direction 3
END_IF
Leader_draw
P1 P2 Length
Direction
TEXT_ADJUST 5
END
END_DEFINE
LET Direction (Direction MOD (PI *
2))
{一周以内にする}
{ 符号の調整}
IF (Direction > PI)
LET Direction (Direction - (PI * 2))
ELSE_IF (Direction < -PI)
LET Direction (Direction + (PI * 2))
END_IF
IF ((Direction >= 0) AND (Direction < (PI /
4))) {右上}
LET Gl_fruit 1
ELSE_IF ((Direction >= (PI / 4)) AND (Direction
< (PI
/ 2))) {上右}
LET Gl_fruit 2
ELSE_IF ((Direction >= (PI / 2)) AND (Direction
< (PI
* (3 / 4)))) {上左}
LET Gl_fruit 3
ELSE_IF ((Direction >= (PI * (3 / 4))) AND
(Direction <
PI)) {左上}
LET Gl_fruit 4
ELSE_IF ((Direction >= PI) OR (Direction <
(-PI * (3
/ 4)))) {左下}
LET Gl_fruit 5
ELSE_IF ((Direction >= (-PI * (3 / 4))) AND
(Direction <
(-PI / 2))) {左下}
LET Gl_fruit 6
ELSE_IF ((Direction >= (-PI / 2)) AND (Direction
< (-PI
/ 4))) {下左}
LET Gl_fruit 7
ELSE_IF ((Direction <= (-PI / 4)) AND (Direction
<
0)) {右下}
LET Gl_fruit 8
END_IF
END_DEFINE
LOCAL Point_x
LOCAL Point_y
LOCAL
Point
{書き込み位置}
LOCAL
Word
{書き込み文字}
LET Point Start_point
LOOP
READ_FILE File_id
Word
{一行取得}
EXIT_IF (Word = 'END-OF-FILE')
IF (Word <> '')
TEXT Word Point
END
{書き込み}
END_IF
LET Point_x (X_OF Point)
LET Point_y (Y_OF Point)
{ 次の書き込みポイント}
IF (Course =
'V')
{鉛直方向なら}
LET Point_y (Point_y +
Pitch)
ELSE
LET Point_x (Point_x +
Pitch)
END_IF
LET Point (PNT_XY Point_x Point_y)
END_LOOP
END_DEFINE
1.データファイルの作り方
1行ずつ、文字列を書いた、ファイルを作って下さい。
ファイル名は適当でOKです。
2.必要なマクロをME10に読み込んで下さい。(下記の3個です。)
方向判断
2(Ma_text_direction)
テ
キスト・ファイルデータの1列書き込み(Ma_text_continue_write)
テ
キスト・ファイルデータの書き込み(Ma_text_write_data)
3.Ma_text_write_data
を実行して下さい。
ファィルリストが開きますので、指示して下さい。
指示した位置から、指示した間隔で、ファィルから1行ずつ読み込んで、書いてくれます。
方向は、4方向です。(上方向、下方向、左方向、右方向)間隔の入力を0にしても書けますが、重なってしまいます。
LET File_id 1
{ 現在の環境の記憶}
INQ_ENV 0
LET Env_dir (INQ
302)
{現在のカレントパス}
Fbt_dtabs_all_on
0
{ファイルディレクトリーリストの表示}
READ STRING '** データの入ったファイルを指示して下さい。**'
File_name
READ NUMBER '** 文字の間隔を入力して下さい。**' Pitch
READ PNT '** スタートの位置を指示して下さい。**' Start_point
READ PNT '** 書き込みの方向を指示して下さい。(上向き、下向き、左向き、右向き)**'
RUBBER_LINE Start_point Course_select
INQ_ENV 6
LET Angle_unit (INQ
3)
{ラディアンへの変換値}
LET Course (ANG (Course_select - Start_point))
LET Course (Course *
Angle_unit)
{ラディアンへ変換}
Ma_text_direction
Course
{方向判断}
{ 方向判断}
IF ((Gl_fruit = 1) OR (Gl_fruit = 4) OR (Gl_fruit =
5) OR
(Gl_fruit = 8)) {横きなら}
LET Course 'H'
ELSE
LET Course 'V'
END_IF
{ 方向によるピッチの符号}
IF ((Gl_fruit >= 4) AND (Gl_fruit <=
7))
{左又は下向きなら}
LET Pitch (-(ABS Pitch))
ELSE
LET Pitch (ABS Pitch)
END_IF
OPEN_INFILE File_id
File_name
{データファイルを読み込みで開く}
CURRENT_DIRECTORY
Env_dir
{カレントパスの復帰}
Ma_text_continue_write
File_id Course Start_point Pitch {書き込み}
CLOSE_FILE
File_id
{データファイルを閉じる}
END_DEFINE
1.どの様なマクロ?
外部で作成した、ファイルからデータを読み込んで、表の状態に書き込みます。
2.データファイルの作り方
a.表計算のソフトで作ります。CSV(コンマ区切り)の形式で保存してください。
b.2行目の1列目は、間隔のデータを図面の尺度に合わせる/合わせ無いを指示します。
合わせる場合は半角文字の S で、合わせないで現尺にする場合は半角文字の
A を入れて下さい。
c.2行目の2列目は、
d.3行目は今後に使う予定です。(いつになるやら?)
f.4行目の1列目は、行間隔を、半角文字の数値で入れて下さい。
g.4行目の2列目以降は、前の列からの間隔を、半角文字の数値で入れて下さい。
(入力されていないセルは、後からの入力となります。)
h.5行目からはデータを入れていきます。
注:ファイル名は、内容が合えば、何でもOK。
3.必要なマクロ
Ma_text_fruit_letter_normal
普通列データの取得
Ma_text_fruit_letter_comma
コンマ内包データの取得
Ma_data_line_jump
データの頭出し
Ma_text_fruit_word_leftover
残りのデータを得る
Ma_text_fruit_word_piece
データの切り出し
Ma_text_direction
方向判断
Ma_text_write_data_csv
テキスト・ファイルデータの書き込み
4.使い方
a.データファイルを作って下さい。
b.必
要なマクロをME10に読み込んで下さい。
c.マクロの Ma_text_write_data_csv
を実行して下さい。
d.データファイルを指示して下さい。
e.間隔データが不足していると入力を求められるので、指示に従って下さい。
f.書き込む位置を求められますので、位置を指示して下さい。
g.書き込む方向は、鉛直で上の方向と、下の方向に書き込みます。
求められれば、マウスでおおよその方向になるように指示をして下さい。
h.カレントパーツに書き込まれます。
4.見本
ME10:部品表(me10sample01)
データファイル:part.csv
部品表をME10に読み込んで、マクロを動かして下さい。
データファイルは、part.csv を指定して下
さい。
表の左上の角を指定の位置として下さい。
方向は、下向きです。
LOCAL
Data01
{処理中データ}
LOCAL
Point
{確認の位置}
LOCAL
Out_flag
{抜けだし用 0=処理中 1=処理完 2=エラー}
LET Data01
Data00
{移す}
LET Gl_fruit ''
LET Out_flag 0
LET Point (POS Data00 ',') {次の , を探す}
IF (Point =
0)
{無ければ}
LET Gl_fruit (Gl_fruit + Data01)
LET Data01 ''
ELSE
LET Gl_fruit (Gl_fruit + (SUBSTR Data01
1 (Point
- 1))) {データを移す}
LET Data01 (SUBSTR Data01 (Point + 1)
((LEN
Data01) - Point))
END_IF
IF (flag_re_data =
1)
{残りデーの要求なら}
LET Gl_fruit Data01
END_IF
END_DEFINE
LOCAL
Data01
{処理中データ}
LOCAL
Point
{確認の位置}
LOCAL
Out_flag
{抜けだし用 0=処理中 1=処理完 2=エラー}
LET Data01 Data00 {移す}
LET Gl_fruit '"'
LET Data01 (SUBSTR Data01 2 ((LEN Data01) - 1))
{先頭を取り除く}
LET Out_flag 0
LOOP
LET Point (POS Data01
'"')
{次の " を探す}
IF (Point =
0)
{無ければ}
LET Gl_fruit -1
LET Out_flag
2
{エラーフラグ}
END_IF
EXIT_IF (Out_flag = 2)
LET Gl_fruit (Gl_fruit + (SUBSTR
Data01 1 Point))
{データを移す}
LET Data01 (SUBSTR Data01 (Point + 1)
((LEN
Data01) - Point))
{ 次のデータチェック}
IF ((num Data01) = (NUM
'"'))
{内部の " なら}
LET Gl_fruit (Gl_fruit +
'"')
{データを移す}
LET Data01 (SUBSTR Data01 2
((LEN
Data01) - 1))
ELSE_IF ((num Data01) = (NUM
','))
{区切りなら}
LET Data01 (SUBSTR Data01 2
((LEN
Data01) - 1))
LET Out_flag
1
{OKフラグ}
ELSE_IF ((LEN Data01) =
0)
{最後なら}
LET Out_flag
1
{OKフラグ}
END_IF
EXIT_IF (Out_flag = 1)
END_LOOP
IF (Out_flag =
1)
{OKなら}
IF (flag_re_data =
1)
{残りデーの要求なら}
LET Gl_fruit Data01
ELSE
LET Gl_fruit (SUBSTR
Gl_fruit 2
((LEN Gl_fruit) - 2)) {" を除く}
END_IF
ELSE
{エラーなら}
LET Gl_fruit -1
END_IF
END_DEFINE
IF ((num Data00) = (NUM
'"'))
{コンマ内包データなら}
Ma_text_fruit_letter_comma
1
Data00
{コンマ内包データの取得}
ELSE
Ma_text_fruit_letter_normal
1
Data00
{普通列データの取得}
END_IF
END_DEFINE
IF ((num Data00) = (NUM
'"'))
{コンマ内包データなら}
Ma_text_fruit_letter_comma
0
Data00
{コンマ内包データの取得}
ELSE
Ma_text_fruit_letter_normal
0
Data00
{普通データの取得}
END_IF
END_DEFINE
LET File_id
1
{開くファイルのID}
LET Table_inside01
'##Gap_row##'
{列の間隔のデーべース}
{ 現在の環境の記憶}
INQ_ENV 0
LET Env_dir (INQ
302)
{現在のカレントパス}
INQ_ENV 19
LET Scale (INQ
4)
{カレントパーツの尺度}
Fbt_dtabs_all_on
0
{ファイルディレクトリーリストの表示}
READ STRING '** データの入ったファイルを指示して下さい。**'
File_name
OPEN_INFILE File_id File_name
CURRENT_DIRECTORY
Env_dir
{カレントパスの復帰}
Ma_data_line_jump
File_id
1
{データの頭出し}
{ 描画尺度方法・2行,1列目}
READ_FILE File_id
Data_line
{一行取得}
IF (((SUBSTR Data_line 1 1) = 's') OR ((SUBSTR
Data_line
1 1) = 'S') OR ((SUBSTR Data_line 1 2) = 's') OR ((SUBSTR
Data_line 1
2) = 'S'))
{スケール指示なら}
LET Scale 1
END_IF
{ スタート位置のオフセット値・2行,2列目}
Ma_text_fruit_word_leftover
Data_line
LET Data_line
Gl_fruit
{一行データの更新}
Ma_text_fruit_word_piece
Data_line
{データの切り出し}
LET Offset_len (PNT_XY 0 0)
LET Kioku ' '
IF ((POS Gl_fruit ' ') <>
0)
{区切りを探す}
LET Kioku (SUBSTR Gl_fruit 1 ((POS Gl_fruit ' ') -
1))
END_IF
IF ((TYPE (VAL Kioku)) =
NUMBER)
{X方向のデータが有れば}
LET Gl_fruit (SUBSTR Gl_fruit ((LEN Kioku) + 2)
((LEN Gl_fruit)
- (LEN Kioku) - 1))
IF ((TYPE (VAL Gl_fruit)) =
NUMBER)
{Y方向のデータが有れば}
LET Offset_len (PNT_XY (VAL Kioku) (VAL
Gl_fruit))
DISPLAY ('** 開始点のオフセット値は X方向 ' + (STR
(X_OF Offset_len)) + '、Y方向 ' + (STR (Y_OF Offset_len)) + '
です。**')
END_IF
END_IF
Ma_data_line_jump
File_id
1
{データの頭出し}
{ 間隔の取得・4行目}
READ_FILE File_id
Data_line
{一行取得}
{ 行間隔の取得・4行,1列目}
Ma_text_fruit_word_piece
Data_line
{データの切り出し}
IF (Gl_fruit =
'')
{無ければ}
LET Pitch_v
0
{後で入力とする}
ELSE_IF (Gl_fruit =
-1)
{エラーなら}
LET Pitch_v -1
ELSE
IF ((TYPE (VAL Gl_fruit)) =
NUMBER)
{数値なら}
LET Pitch_v ((ABS (VAL
Gl_fruit))
/ Scale) {絶対値を取得}
ELSE
LET Pitch_v -1
END_IF
END_IF
IF (Pitch_v = 0)
LOOP
READ NUMBER '**
行間隔の数値を入力して下さい。(終了は、[ESC]キーを押して下さい。)
**' Pitch_v
LET Pitch_v ((ABS (VAL
Gl_fruit))
/ Scale) {絶対値を取得}
EXIT_IF (Pitch_v > 0)
END_LOOP
ELSE_IF (Pitch_v = -1)
LOOP
READ NUMBER '**
セルデータから行間隔の数値が取得できません。数値を入力して下さい。(終了は、[ESC]キーを押して下さい。)
**' Pitch_v
LET Pitch_v ((ABS Pitch_v)
/ Scale)
{絶対値を取得}
EXIT_IF (Pitch_v > 0)
END_LOOP
END_IF
Ma_text_fruit_word_leftover
Data_line
LET Data_line
Gl_fruit
{一行データの更新}
CREATE_LTAB 10 1
Table_inside01
{列間隔格納テーブル}
LET Pointer 1
{ 列の間隔の取得}
IF (Data_line <>
'')
{データが有れば}
LOOP
Ma_text_fruit_word_piece
Data_line
{データの切り出し}
LET Pitch_h 0
IF (Gl_fruit =
'')
{データが無ければ}
LET Pitch_h -1
ELSE_IF ((TYPE Gl_fruit) =
STRING)
{文字列で有れば}
IF ((TYPE (VAL Gl_fruit) <>
NUMBER))
{数値列以外なら}
LET Pitch_h -1
END_IF
ELSE
{エラーの戻りなら}
LET Pitch_h -1
END_IF
IF (Pitch_h >=
0)
{エラーで無ければ}
LET Pitch_h ((ABS
(VAL Gl_fruit))
/ Scale) {絶対値を取得}
END_IF
IF (Pitch_h <= 0)
DISPLAY ('** 列 ' +
(STR Pointer)
+ ' と ' + (STR (Pointer + 1)) + ' の間隔データは後から入力します。終了なら
[ESC]キーを入力 **')
ELSE
WRITE_LTAB Table_inside01
Pointer
1 Pitch_h {記憶}
END_IF
Ma_text_fruit_word_leftover
Data_line
LET Data_line
Gl_fruit
{行データの更新}
EXIT_IF ((LEN Data_line) =
0)
{一行データが無くなれば}
LET Pointer (Pointer + 1)
END_LOOP
END_IF
READ PNT '** 書き出しの、位置を指示して下さい。**' Point
{ 位置の入力}
{ 方向判断}
READ PNT '** 書き込む方向を指示して下さい。上方向と下方向が選択できます。**'
RUBBER_LINE Point Course_select {方向指示の入力}
INQ_ENV 6
LET Angle_unit (INQ
3)
{ラディアンへの変換値}
LET Course (ANG (Course_select - Point))
LET Course (Course *
Angle_unit)
{ラディアンへ変換}
Ma_text_direction
Course
{方向判断}
IF ((Gl_fruit > 4) AND (Gl_fruit <=
8))
{下方向なら}
LET Pitch_v (- Pitch_v)
END_IF
LET Point (Point + Offset_len)
LET Point_x0 (X_OF Point)
LET Point_x Point_x0
LET Point_y (Y_OF Point)
{ 書き込み}
LOOP
READ_FILE File_id
Data_line
{一行取得}
EXIT_IF (Data_line =
'END-OF-
FILE')
{データが終了なら}
LET Pointer 0
{ 一行の書き込み}
LOOP
EXIT_IF ((LEN Data_line) =
0)
{無くなれば}
Ma_text_fruit_word_piece
Data_line
{データの切り出し}
LET Word Gl_fruit
Ma_text_fruit_word_leftover
Data_line {残りのデータ}
LET Data_line Gl_fruit
IF (Pointer <>
0)
{最初の列以外なら}
LET Pitch_h
(READ_LTAB
Table_inside01 Pointer 1)
IF ((TYPE
Pitch_h) =
STRING)
{空なら}
LET
Pitch_h
-1
END_IF
IF (Pitch_h
<
0)
{後入力なら}
LOOP
READ
NUMBER '** 次の文字列までの距離値を入力して下さい。(終了は、[ESC]キーを押して下さい。)
**' Pitch_h
LET
Pitch_h (ABS
(Pitch_h))
{絶対値を取得}
EXIT_IF
(Pitch_h > 0)
END_LOOP
WRITE_LTAB
Table_inside01 Pointer 1 Pitch_h {入力値を記憶}
END_IF
LET Point_x
(Point_x
+ Pitch_h)
LET Point
(PNT_XY Point_x
Point_y) {次の位置}
END_IF
LET Pointer (Pointer + 1) {カウントUP}
IF (Word <> '')
TEXT Word Point
END
{書き込み}
END_IF
END_LOOP
LET Point_y (Point_y + Pitch_v)
LET Point_x Point_x0
LET Point (PNT_XY Point_x
Point_y)
{次の位置}
END_LOOP
DELETE_LTAB
Table_inside01
{行間隔のテーブルを閉じる}
CLOSE_FILE
File_id
{データファイルを閉じる}
END_DEFINE
気をつけて作りました、使用してのトラブルに責任は持てませんが、
自由にお使い下さい。(伏 見 表)