CSVファイルの改行の削除について

改行のあるカンマ区切りのCSVファイルから、 改行をすべて削除するプログラムを作りたいのですが、 改行が削除できません。
checkfile	="test.csv"
fid= FOPEN(checkfile,F_READ or F_WRITE8)
FOR col = 1 to FGET(fid, -1) //行数分
	linestr= FGET(fid, col)
	linestr= TRIM(linestr,TRUE)
	linestr= REPLACE(linestr, "<#CR>", "") 
	FPUT(fid,linestr,col)
NEXT
FCLOSE(fid)
改行コードは以外にもあるようですが、 、も試してみましたが、 削除できませんでした。 方法はありますでしょうか? よろしくお願い致します。

タグ

2012年6月12日 | コメント/トラックバック(3) |

カテゴリー:掲示板

ファイル書き込み

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

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

ファイルに値を書き込む

ファイルを開き、値を書き込む
こういった処理はよくありますが、FOPENでのファイルオープンや、
FCLOSEによるファイルクローズと言った手続きを忘れてしまいがちです。
下記はファイルに値を書き込むシンプルなスクリプトの例です。

//C:\temp.txtに日付を記入したファイルを作成
FNAME = "C:\temp.txt"
DOSCMD("echo %DATE% %TIME% > " + FNAME)
//ファイルをオープン
ID = FOPEN(FNAME,F_READ or F_WRITE)

//ミリセカンドまで含めた時間を10回書き込む
FOR A = 1 TO 10
GETTIME()
NOW = G_TIME_YY + "/" + G_TIME_MM + "/" + G_TIME_DD + " " + G_TIME_HH + ":" + G_TIME_NN + ":" + G_TIME_SS + "." + G_TIME_ZZ
FPUT(ID,NOW)
NEXT

//最後にファイルクローズ
FCLOSE(ID)

//中身を確認した後、ファイル自体は削除
DOSCMD("notepad " + FNAME)
DOSCMD("del " + FNAME)

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

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

この投稿の続きを読む »

タグ

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

カテゴリー:逆引き関数

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日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

まとめて特定の組合わせの文字列をつくりたい。

まとめて特定の組合わせの文字列をつくりたい。
具体的には、アフィリエイト用のキーワードを作りたいと思っています。
例) 
Aグループ
FX
株式
日経225
先物
Bグループ
登録
入会
口座開設
比較

それぞれのグループのワードを全て組合わせたキーワードを作成したいです。
FX 登録、FX 入会、FX 口座開設、FX 比較、株式 登録、株式 入会・・・
といった具合です。よろしくお願いします。

EXCELでもできないことはありませんが、
すべての組合せをいちいちやるのは大変ですね。

また、VBAを利用する方法がありますが、
UWSCと較べると少しハードルが高いようです。

UWSCならば、FOPEN関連のスクリプトを使えば簡単にできます。
前提として、
Aグループのワードを1語づつ改行したテキストファイルをA.txt
同様にBグループをB.txtとします。

PRINTで組合せを表示するサンプル
///ファイルオープン
fid	= FOPEN("A.txt", F_READ)
fid2	= FOPEN("B.txt", F_READ)

For KAISU_A = 1 to FGET(fid, -1)

	STR_A = FGET(fid, KAISU_A)	//A.txtのデータを取得
	For KAISU_B = 1 to FGET(fid2, -1)
		
		STR_B = FGET(fid2, KAISU_B)	//B.txtのデータを取得

		PRINT STR_A + " " + STR_B	//AとBを組合わせる

	NEXT
NEXT
FCLOSE(fid)
FCLOSE(fid2)

解説

使用している関数はFOPEN,FGET,FOR~NEXTになります。
これら個々の説明は関数一覧などを参照していただくとして、
サンプルの中で、覚えておきたいのは、
FGET(fid, -1)です。

通常、FGET関数は、fidの後は行番号を指定しますが、
「-1」の場合、ファイルの行数を返します。

これにより、ファイルの行数分、上からデータを取得できます。
このテクニックは非常に有効なので、覚えておくと便利です。

後は、すべての組合せを実現するためにFORの中でFORをかます
というテクニックですべての組合せを行えます。

さらに便利に使いたい場合は、
A.txtをフォームから生成させる方法などがあります。

タグ


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

カテゴリー:Q&A

このページの先頭へ