アプリ版:「スタンプのみでお礼する」機能のリリースについて

1つの入力フォルダの値を読み込み、3分割をして新しい変数に代入する方法を教えていただきたいです。

読み込むテキスト
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
このように入力されており、これを読み込んで3分割にし、3つの変数に分割したのを入れたいと考えております。
コードはこのように書いています。




j = 0
Do Until ifs.AtEndofStream
¡Rec = ifs.ReadLine
uArray = Split (iRec, “ ,”)
Count = Count + 1
If Count < 3Then
For k = 0 To UBound(uArray)
uArray1(j, k) = uArray(k)
Next
j = j +1
ElseIf Count >2 And Count<6
For k = 0 To UBound(uArray)
uArray2(j, k) = uArray(k)
Next
j = j +1
Endif
Loop

A 回答 (4件)

>テキストファイルの1行目から3行目をuarry1に4行目をuarray2にようにしたいです。


uarry1、uarray2って(Splitあるので2次元)配列ですよね?
>(3,3)にした理由といたしましては、テキストフォルダを3分割にしてそれぞれの123に格納したかったからです。

読み込むテキスト
各行の値を変えて 変数と取得したい変数の値を示した方が良いのでは?

読み込むテキスト
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
1,2,1
この場合27個のデータ

現行コードを見ると、行単位でカンマ区切りの値を配列に代入していると思うのですが

つまり、配列の一時側のカウント変数jを 配列を変える時に初期化0にすれば良いと思いますよ
(j,k)
1~3行目
uArray1(0, 0) uArray1(0, 1) uArray1(0,2) 各値は 1 2 1
uArray1(1, 0) uArray1(1, 1) uArray1(1, 2)
uArray1(2, 0) uArray1(2, 1) uArray1(2, 2)
4~6行目
uArray2(0, 0) uArray2(0, 1) uArray2(0, 2)
uArray2(1, 0) uArray2(1, 1) uArray2(1, 2)
uArray2(2, 0) uArray2(2, 1) uArray2(2, 2)
7~9行目
uArray3(0, 0) uArray3(0, 1) uArray3(0, 2)
uArray3(1, 0) uArray3(1, 1) uArray3(1, 2)
uArray3(2, 0) uArray3(2, 1) uArray3(2, 2)
    • good
    • 0
この回答へのお礼

このように行った所うまく行をうまく分けることができました。初期化がうまく行ってなかったのも、原因だったそうです。
ありがとうございます助かりました!

お礼日時:2022/10/18 22:17

コードそのままで解釈すると(書き方もそのまま)



Do Until ifs.AtEndofStream
iRec = ifs.ReadLine
uArray = Split(iRec, " ,")
Count = Count + 1
If Count <= 3 Then
If Count = 1 Then j = 0
For k = 0 To UBound(uArray)
uArray1(j, k) = uArray(k)
Next
j = j + 1
End If
If Count >= 4 And Count <= 6 Then
If Count = 4 Then j = 0
For k = 0 To UBound(uArray)
uArray2(j, k) = uArray(k)
Next
j = j + 1
End If
If Count >= 7 And Count <= 9 Then
If Count = 7 Then j = 0
For k = 0 To UBound(uArray)
uArray3(j, k) = uArray(k)
Next
j = j + 1
End If
Loop

0スタートなので(2,2)で良いと思います 3種類全部で27データ
    • good
    • 0
この回答へのお礼

テキストファイルの1行目から3行目をuarry1に4行目をuarray2にようにしたいです。

お礼日時:2022/10/18 10:11

>(3,3)


と言う事はifs.ReadLineは4行で終わりと言う事でしょうか

また、uArray1には16個の値を格納できますが・・
0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3

どのように格納したいのでしょうか?
uArray1~uArray3 だと48個ですね

一応
2次元配列のサイズ変更は2次側のみ可能なので この処理の様に個数が決まっている方を1次側、たぶん決まっていない行数の方を2次側にして、繰り返し処理の中でReDim Preserveステートメントでサイズを変更したりします

また、あらかじめテキストの行数を取得して
Set fso = CreateObject("Scripting.FileSystemObject")
行 = fso.OpenTextFile(fileName:="C:\xx\qa.txt", iomode:=8).Line
Set fso = Nothing
ReDim uArray1(3,行-1)
とかで設定します

#1のサンプル 3パターンを見て確かめてみてください
    • good
    • 0
この回答へのお礼

説明が下手で申し訳ありません。。。
(3,3)にした理由といたしましては、テキストフォルダを3分割にしてそれぞれの123に格納したかったからです。

お礼日時:2022/10/18 10:05

こんばんは


>3分割にし、3つの変数に分割したのを入れたいと考えております。

2次元配列を作っているようなので >新しい変数 とちょっと違うかも

また、新しい配列のサイズはどうしているのかな?(1次側増やせないので)

ぱっと見 Then とかも無いですし・・最終的にどんな変数を作りたいのか?分かりません・・

下記の様な書き方で参考になるか・・な(サイズの決め方で変わります)
j = 0
Do Until ifs.AtEndofStream
iRec = ifs.ReadLine
uArray = Split(iRec, ",")
uArray1(0, j) = uArray(0)
uArray1(1, j) = uArray(1)
uArray1(2, j) = uArray(2)
j = j + 1
Loop

-----
j = 0
Do Until ifs.AtEndofStream
iRec = ifs.ReadLine
uArray = Split(iRec, ",")
For k = 0 To UBound(uArray)
uArray1(k, j) = uArray(k)
Next
j = j + 1
Loop

----
j = 0
Do Until ifs.AtEndofStream
iRec = ifs.ReadLine
uArray = Split(iRec, ",")
For k = 0 To UBound(uArray)
If k < 3 Then
uArray1(j, k) = uArray(k)
ElseIf k >= 3 And k < 6 Then
uArray2(j, k - 3) = uArray(k)
Next
j = j + 1
End If
Loop
    • good
    • 0
この回答へのお礼

ありがとうございます。
変数としては
uArray1(3,3)
uArray2(3,3)
uArray3(3,3)
のように設定しております。

お礼日時:2022/10/18 00:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!