FCLOSE

FCLOSE関数

ファイルをクローズし変更を確定する
戻値 = FCLOSE( ファイルID, [エラー処理] )

引数
・ ファイルID・・・FOPENで取得したファイルID
・エラー処理・・・FALSE:エラー時にダイアログを出す(デフォルト)、TRUE:ダイアログを出さない

ファイルをクローズする

//C:\myTest.txtにファイルを作成
DOSCMD("echo %DATE%%TIME%  > C:\myTest.txt")
//ファイルをオープンして書き込み
ID = FOPEN("C:\myTest.txt",F_READ or F_WRITE)
FPUT(ID,"Hello")
//クローズして内容を確定
FCLOSE(ID)
//中身を確認した後、ファイル自体は削除
DOSCMD("notepad C:\myTest.txt")
DOSCMD("del C:\myTest.txt")

上記スクリプトではきちんと最後にFCLOSEをしているので、
「Hello」と記入され、変更が反映されています。
FCLOSEしない下記のスクリプトとの差異を見てみましょう。

この投稿の続きを読む »

タグ

2012年5月17日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

FDELLINE

FDELLINE関数

ファイルの指定行を削除
FDELLINE(ファイルID, 行)

引数
・ ファイルID・・・FOPENで取得したファイルID
・行・・・削除する行(1から指定)

ファイルの指定行を削除

//C:\myTest.txtにファイルを作成
DOSCMD("echo %DATE%%TIME%  > C:\myTest.txt")
DOSCMD("echo 2行目!!!!>> C:\myTest.txt")
DOSCMD("echo 3行目!!!!>> C:\myTest.txt")
//ファイルをオープンして書き込み
ID = FOPEN("C:\myTest.txt",F_READ or F_WRITE)
FDELLINE(ID,2)
FCLOSE(ID)
//中身を確認した後、ファイル自体は削除
DOSCMD("notepad C:\myTest.txt")
DOSCMD("del C:\myTest.txt")

「2行目!!」と記載されているはずの2行目が
削除されていることが確認できます。
最後にFCLOSEをしている点を忘れずに。

条件に一致する行を削除していく

次にFGETと組み合わせて
条件分岐をはさみながらFDELLINEを
実行してみましょう。
まず名前、年齢、都道府県を記したカンマ区切りの
データを作ります。 そのデータを1行1行チェックし、
もし最初の値が「太郎」で始まる場合は、
その行を削除します。 スクリプトは下記のようになります。

この投稿の続きを読む »

タグ

2012年5月16日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

VLOOKUPのような機能をUWSCでも欲しい。

VLOOKUPのような機能をUWSCでも欲しい。
対象はCSVファイル。
VLOOKUP関数は、データを検索し、そのデータに該当した行の指定列からデータを取り出す関数です。

Excelでは非常に多く利用される関数のひとつです。
VLOOKUPに関する詳細な説明は、リンクや『Excel VLOOKUP』などで検索してご確認ください。

前提として、下図のようなCSVデータがあるとします。

概要

ここで説明する関数は、VLOOKUP同様、

  1. 検索文字列(ID)列番号を指定
  2. 検索文字列(ID)を指定
  3. 取得したい列番号を指定

これにより、探し出したいデータを取得できます。
列の内容を把握していれば、IDからデータの取得だけでなく、
逆にデータから行番号(ID)を取得することも可能です。

ただし、毎回ファイル名を指定する点など、
実用的でない点もあるので、業務で利用する際はカスタマイズしてご利用ください。

スクリプト

RETU	= INPUT("半角数字で検索文字列番号を指定してください<#CR>左から1,2・・・")

IFB CHKNUM(RETU) = FALSE
	MSGBOX("数値が入力されていません")
	ExitExit
ENDIF


FPATH	= INPUT("CSVファイルをドラック&ドロップしてください")
FID	= FOPEN(FPATH)

IFB FID = -1
	MSGBOX("ファイルがオープンできません")
	ExitExit
ENDIF


LOOKID		= INPUT("検索文字(ID)を指定してください")

LINECOUNT	= FGET(FID,F_LINECOUNT)	//全行数

GYOU	= 1
WHILE LOOKID <> FGET(FID,GYOU,RETU)
	GYOU	= GYOU + 1
	IFB GYOU > LINECOUNT
		MSGBOX("検索文字列はありません")
		ExitExit
	ENDIF
WEND

NextRETU	= INPUT("半角数字で取得したい列番号を指定してください<#CR>左から1,2・・・")
IFB CHKNUM(NextRETU) = FALSE
	MSGBOX("数値が入力されていません")
	ExitExit
ENDIF


VAL	= FGET(FID,GYOU,NextRETU)

MsgBox(VAL)

解説

ここで1番の肝となるのは、

この投稿の続きを読む »

タグ

2012年5月15日 | コメントは受け付けていません。 |

カテゴリー:Q&A

全角英数のみ半角にする方法

strconvの使い方はわかるのですが、全角英数のみ半角にしたいのですが、そのような方法はあるのでしょうか? str = “あいうえお bcd 139482 カタカナ” をstrconvを使って変換するとカタカナまで半角になってしまいます。 これを防ぎたいと思います。よろしくお願いします。

タグ

2012年5月15日 | コメント/トラックバック(2) |

カテゴリー:掲示板

FPUT

FPUT関数

ファイルに書き込む
FPUT( ファイルID, 書込み値, [行, 列])

引数
・ ファイルID・・・FOPENで取得したファイルID
・書込み値・・・ファイルに書き込む値
・行・・・書込み行(1から指定)、0で行末に追加。
F_ALLTEXTを指定した場合は行ではなくファイルの全内容として書き込む
・列・・・書込み列(1から指定)
カンマ区切りのCSVファイルに対応
F_INSERTを指定した場合は指定行に挿入
※書き込み内容の反映はFCLOSEの実行時

ファイルに値を書き込む

//C:\myTest.txtにファイルを作成
DOSCMD("echo %DATE%%TIME% > C:\myTest.txt")
//ファイルをオープンして書き込み
ID = FOPEN("C:\myTest.txt",F_READ or F_WRITE)
FPUT(ID,"Hello World")
FCLOSE(ID)
//中身を確認した後、ファイル自体は削除
DOSCMD("notepad C:\myTest.txt")
DOSCMD("del C:\myTest.txt")

このスクリプトで日時が記載されたファイルに
Hello Worldという文言が追加されていることが
確認できます。

CSVファイルの指定位置に値を書き込む

次にFPUT関数の様々な引数を利用し
CSVファイルの指定位置に情報を書き込んで見ます。
サンプルでは3行のカンマ区切りのファイルの中で、
3行目の4つ目の値を対象にしています。 スクリプトは下記のようになります。

この投稿の続きを読む »

タグ

2012年5月15日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

FGET

FGET関数

ファイルを読み込む
戻値 = FGET( ファイルID, 行, [列, ダブルクォーテイション])

引数

ファイルID・・・FOPENで取得したファイルID
行・・・取出したい行(1から指定)

もしくは下記を指定
F_LINECOUNT・・・ファイルの行数を返す
F_ALLTEXT・・・ファイルの全内容を返す

列・・・取出したい列(1から指定:,カンマ区切りのCSVファイルに対応)
ダブルコーテイション

FALSE: 両端のダブルコーテイションは削除(デフォルト)
TRUE: 削除しない
戻値
取出された値

ファイルの中身の全内容を返す

//事前にファイルを準備
//C:\myTest.txt作成
DOSCMD("echo %DATE%%TIME% > C:\myTest.txt")
ID = FOPEN("C:\myTest.txt")
PRINT FGET(ID,F_ALLTEXT)
//中身を確認した後、ファイル自体は削除
MSGBOX("C:\myTest.txtをメモ帳で開き、削除します")
DOSCMD("notepad C:\myTest.txt")
DOSCMD("del C:\myTest.txt")

このスクリプトでファイルの中身を取得できます。
スクリプト実行後は作成したファイルは不要なので
削除しています。

ファイルの指定行数のデータを取得する

3行分のデータがあるファイルを対象に
指定行のデータを取得してみましょう。
スクリプトは下記のようになります。

この投稿の続きを読む »

タグ

2012年5月14日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

FOPEN

FOPEN関数

ファイルをオープンする
戻値 = FOPEN( ファイル名, [オープンモード])

引数
ファイル名・・・テキストファイルの名前
オープンモード・・・ファイルをオープンする際の方法を指定
・F_READ・・・読み専用モード(デフォルト)
SJIS、UTF8、UTF16に対応
・F_WRITE・・・書き専用モード
既にファイルがあれば前の情報は消去
UNICODEがある場合に UTF8、無い場合にはSJISになる
・F_READ or F_WRITE・・・読み書き両用指定
・F_EXISTS・・・存在チェック
ファイルオープンせずにファイルが存在するかを返す
ディレクトリをチェックしたい場合は最後に \を付加

下記は追加で指定をする
・F_EXCLUSIVE・・・排他制御
排他制御の読み書き・・・F_READ or F_WRITE or F_EXCLUSIVE
・F_TAB・・・CSV処理に対しカンマではなくタブを使用
・F_NOCR・・・最後の改行をしない
書き込みにてファイルの最後の改行は付加しない
F_WRITE or F_NOCR

※文字コード指定する際は、F_WRITEの代わりに以下を使用する
・F_WRITE8・・・UTF8
・F_WRITE8B・・・BOM付きUTF8
・F_WRITE16・・・UTF16
・F_WRITE1・・・SJIS
戻値
・ファイルID、オープンできない場合は-1
・F_EXISTS指定時はTRUE(有り)/ FALSE(無し)

ファイルの存在をチェックする

F_EXISTSを使用し、ファイルの存在有無をチェックします。

//一回目のチェック
IFB FOPEN("C:\myTest.txt", F_EXISTS)
 MSGBOX("C:\myTest.txtは存在します。") 
ELSE
 MSGBOX("C:\myTest.txtは存在しません。")
ENDIF

//C:\myTest.txtを作成
MSGBOX("日時を記入したファイルC:\myTest.txtを作成します")
DOSCMD("echo %DATE%%TIME% > C:\myTest.txt")

//二回目のチェック
IFB FOPEN("C:\myTest.txt", F_EXISTS)
 MSGBOX("C:\myTest.txtは存在します。") 
ELSE
 MSGBOX("C:\myTest.txtは存在しません。")
ENDIF

//中身を確認した後、ファイル自体は削除
MSGBOX("C:\myTest.txtをメモ帳で開き、削除します")
DOSCMD("notepad C:\myTest.txt")
DOSCMD("del C:\myTest.txt")

このスクリプトでファイル存在チェックが行えます。
スクリプト実行後は作成したファイルは不要なので
削除しています。
通常、ファイルに対して何らかの処理をする場合は
FOPEN関数でファイルIDを取得し、
そのIDを使用して命令を実行させます。

ファイルIDを取得するファイルを実行時に指定する

INPUTボックスを使用して、ファイルIDを取得するファイルを
実行時に指定してみましょう。
スクリプトは下記のようになります。

この投稿の続きを読む »

タグ

2012年5月13日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

JOIN

JOIN関数

配列の中身を区切文字で結合する 戻値 = JOIN( 変数名, [区切文字列, 空文字処理フラグ, 開始, 終了] )

引数

変数名・・・対象の配列変数名
区切文字列・・・結合に使用する区切文字列、省略時はスペース
空文字処理フラグ・・・FALSEの場合は空文字も有効(デフォルト)、TRUEの場合だと空文字は無効として処理しない
開始、終了・・・結合する配列の開始位置、終了位置の添え字を指定

戻値

作成された文字列


配列から文字列を作成する

DIM STR[2]
STR[0] = "090"
STR[1] = "1234"
STR[2] = "56XX"
PRINT JOIN(STR,"-")

タグ

2012年5月12日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

文字列の取得

文字列の取得
戻値 = GETSTR(ID,[番号,種別,マウス移動])

引数

ID
Windowを識別するID
(ID = 0 であれば クリップボードから)
番号
左上から数えたコントロールの順番 (1から指定、マイナスを付けた場合にはDisable状態のものもカウント)
(0:デフォルトはフォーカスを持ったコントロール)
(ステータスバー指定時はパーツ)
種別
STR_EDIT (0)    // エディトコントロール(デフォルト)
STR_STATIC (1)   // スタティクコントロール
STR_STATUS (2)   // ステータスバー
STR_ACC_EDIT (3)  // ACC用インターフェース経由でのエディト内文字
STR_ACC_STATIC (4) // ACC用インターフェース経由でのスタティク文字
マウス移動
FALSE: マウス移動なし(デフォルト)
TRUE: マウスをその場所に移動させる

戻値
取得した文字列

メモ帳を起動して、『TEST』という文字列を送り、メモ帳に書かれた文字列を取得する

GID = EXEC("notepad")
SENDSTR(GID,"TEST")
MSGBOX("メモ帳に表示された文字列を取得します")
STR = GETSTR(GID,1,STR_EDIT)
MSGBOX(STR)

なりマッチポンプなサンプルで恐縮ですが、
このように使えます。

私自身は、
クリップボード(0)の文字列
を取得する際に利用することが多いです。

タグ

2012年5月11日 | コメントは受け付けていません。 |

カテゴリー:逆引き関数

SPLIT

SPLIT関数

文字列を区切り配列を作成する 戻値 = SPLIT( 文字列, [区切文字列, 空文字処理フラグ, 数値処理フラグ] )

引数

文字列・・・対象の文字列
区切文字列・・・区切る為の文字列、省略時はスペース
空文字処理フラグ・・・FALSEの場合は空文字も有効(デフォルト)、TRUEの場合は空文字は無効として処理しない
数値処理フラグ・・・FALSEの場合は数値以外も有効(デフォルト)、TRUEの場合だと数値以外は無効として空文字に変更する

戻値

作成された一次元配列(SAFEARRAY型)


文字列から配列を作成する

//区切り文字は「@」
STR = "USA@JAPAN@RUSSIA@THAI"
ARR = SPLIT(STR,"@")
FOR A = 0 TO RESIZE(ARR)
 PRINT ARR[A]
NEXT

タグ

2012年5月11日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

このページの先頭へ