POS

POS関数

文字列に指定文字列があるか探す
戻値 = POS( 探す文字, 探される文字列 [,n個目] )
バイト処理の場合はPOSB関数を使用

引数

探す文字・・・探したい文字列
探される文字列・・・探される文字列
n個目・・・nを指定するとn個目の文字位置を返す(マイナス値で指定すると後ろからサーチ)

戻値

見つかった位置(1から)
見つからなければゼロを返す
大文字、小文字の区別はしない


該当の文字列が登場する位置を見つける

STR = "埼玉県東京都千葉県神奈川県"
PRINT POS("東京",STR)

該当の文字列以降全てを抽出する

POS関数の具体的な利用例として、
該当の文字列以降の全文字を抜き出す方法を見てみましょう。
以下のスクリプトでは「東京」と言う文字列以降の全てを
抽出しています。
POS関数とCOPY関数の組み合わせがポイントとなります。

この投稿の続きを読む »

タグ

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

カテゴリー:関数一覧

部分的にダブルクォーテーションで括られたCSVファイルを整形したい

部分的にダブルクォーテーションで括られたCSVファイルを整形したい。
具体的には、
aaa,bbb,”ccc,ccc”,ddd,”eee,eee”

aaa,bbb,ccc ccc,ddd,eee eee
のようにしたいです。
アフィリエイトサイトのデータをCSVで落としてくると、

まれにこういった形式になっていることがありますね。

せっかくCSVからHPを作成するシステムを作ったのに、
ダブルクォーテーションに括られているパターンを想定していなかったため、
データがうまくDBに取り込めなかったり、エラーが発生してしまうことがあります。
そして、結局CSVを取り込みやすい形に直すために手間取られてしまう・・・。

そんな状況もUWSCで解決できます。

前提として、UWSCの特殊文字についておさえておきましょう。

< #CR>
改行コードを表す
< #DBL>
ダブルコーテイションを表す
< #TAB>
タブを表す

今回は、カンマとダブルコォーテーションの関係に注目します。
質問のCSVパターンは必ず「,”」で始まり「”,」で括られます。

つまり、「,”」と「”,」に挟まれた文字列を取得し、
その文字列内のカンマ(,)をスペースに置換する作業を繰り返せば良いわけです。

その際に注意しないといけないのは、
ダブルクォーテーションで括られる文字列は、
1行の間に必ずしも1回ではないということです。
無い場合もあるし、複数回ある場合も考えられます。

そこで、IF文WHILE文を使って対応できるようにします。
これらを踏まえて作成した関数は以下の通りです。

////////////////////////////////
//不要なカンマをスペースに変更する関数
//STR:文字列
////////////////////////////////

FUNCTION CANMA(STR)
	CNT = 1
	IFB POS(",<#DBL>",STR)>0
		WHILE POS(",<#DBL>",STR,CNT)

			BFO = POS(",<#DBL>",STR,CNT)
			AFT = POS("<#DBL>,",STR,CNT)
			TGT = COPY(STR,BFO+2,AFT-BFO-2)
			STR = REPLACE(STR, TGT,REPLACE(TGT,","," "))
			CNT = CNT + 1
		WEND
	ENDIF

	RESULT =STR
FEND

解説

CNTは括られた文字列が何個目かを認識します。
最初のIF文の条件で「,”」を検索します。
これにより、括られた文字列のあり無しを判断します。

次のWHILEである限り置換作業を行う命令をします。
その後は一般的な置換作業となります。
TGTを求めるために「+2」「-2」をしているのは、
カンマとダブルクォーテーションの文字数を指しています。

ナカヤマン自身も使っている、CSV置換の構文は以下の通りです。↓↓

CSV整形スクリプト・サンプル:列の削除とカンマ整形とUTF8化

この投稿の続きを読む »

タグ

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

カテゴリー:Q&A

文字列のコピー

文字列の一部をコピーする関数です

COPY(文字列,開始位置,コピーする文字数)

文字列
対象となる文字列
開始位置
コピーの開始位置を先頭からの文字数で指定
コピーする文字数
何文字目までコピーするかを指定

れによって、文字列の任意の部分を取得できます。
※ バイト処理の場合は COPYB です。
また、POS関数LENGTH関数と連動させて、利用されることが多いです。
EXCEL関数を多用される方には、利用シーンが沢山見つかるでしょう。

名前だけを取得するサンプル
//常に姓と名の間にスペースがある前提
mojiretu = "山田 まりお"
STR = COPY(mojiretu,POS(" ",mojiretu)+1,LENGTH(mojiretu))
PRINT STR

タグ

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

カテゴリー:逆引き関数

このページの先頭へ