水曜日 - 最終編集 水曜日
下記リンク先の内容を参考に基本的な取得はできましたが、応用?的な取得方法わかる方いましたら教えてください。
TXTファイルに画像のように記載しているとき。
①~③番の各値をそれぞれ取得したいのですが、どのようにすれば値を取得して配列に格納できるか知りたいです。
よろしくお願いします。
木曜日
①に関してのみですが、こんな形で取得はできます。
! 参照ファイル
_filename = stFilename
!!変数を定義
var1 = ""
var2 = 0
! var3 = ""
! var4 = ""
! var5 = ""
! 配列を定義
DIM sarray1[]
DIM sarray2[]
DIM sarray3[]
DIM sarray4[]
DIM sarray5[]
DIM sarray10[]
! ファイルを開く
ch1 = open ("TEXT", _filename,"SEPARATOR = ',', mode = ro, LIBRARY")
i = 1
j = 1
sarray1[1] = ""
sarray2[1] = 0
sarray3[1] = 0
sarray4[1] = 0
sarray5[1] = 0
sarray10[1] = 0
head_text = ""
head_num = 0
! 全ての文字列を収集
DO
nr1 = INPUT (ch1, i, 1, var1,var2,var3,var4,var5)
IF nr1 > 0 AND VARTYPE (var1) = 2 THEN
sarray1[j] = var1
sarray2[j] = var2
sarray3[j] = var3
sarray4[j] = var4
sarray5[j] = var5
! ポイント1:j行1列目で取得した文字列に"E"が含まれるかを取得
existE = STRSTR(sarray1[j],"E")
if existE then ! ポイント2:Eが含まれる場合はその行のパラメータをsarray10に格納
!ポイント3:1列目は「E=**」という文字列なのでそこから**の数値だけを抽出する
n = split(sarray1[j],"E=%n",splitE,splitnum)
sarray10[1] = splitnum
sarray10[2] = sarray2[j]
sarray10[3] = sarray3[j]
sarray10[4] = sarray4[j]
sarray10[5] = sarray5[j]
endif
j = j + 1
ENDIF
i = i + 1
WHILE nr1 > 0
close ch1
! 配列をパラメータに入力
RefNote1 = sarray1
RefNote2 = sarray2
RefNote3 = sarray3
RefNote4 = sarray4
RefNote5 = sarray5
parameters RefNote1 = RefNote1
parameters RefNote2 = RefNote2
parameters RefNote3 = RefNote3
parameters RefNote4 = RefNote4
parameters RefNote5 = RefNote5
for i = 1 to 5
RefNote10[i] = sarray10[i]
parameters RefNote10[i] = RefNote10[i]
next i
1列目の値を取得して"E"が含まれる行の5列目までの値を取得しています。
また、1列目は”E=**"の形で一つのフィールドに値も入ってしまっているので、文字列分割で数値のみを取り出しています。
参考までにgsmファイルも添付してあります。
なお、ご提示のような形のCSVを上手く読み取るのはなかなか骨の折れる作業です。
CSVは本来、ExcelやDBと同じようにカラム(列)とレコード(行)が整然と並んでいるべきフォーマットだと思っていますので、CSVの形の方を変えることがもし可能なのであればそちらの方が良いと思います。
金曜日
@Kotetsu 様
早速のご返答ありがとうございます。
1については参考にして取得してみたいと思います。
このtxtについては既にこういう記述がされたファイルが大量にあり、
そのデータをうまく利用したいので何とか取得できないかと思いました。
サンプルまで添付いただきありがとうございます。
1の取得してみます!