VB2005 符号を踏まえた降順ソートについて
いつもお世話になっております。
私はVB2005入門者です。
hoge.txtからカンマ0列目に"ABCD"且つ1行目に"T"がつく行の2,3,4列目を
nfMov_x(),nfMov_y(),nfMov_z()に格納しソートを使って
配列内の数値を降順に並び替えて、最大値を求めたいのですが
絶対値に置き換え符号を無視した処理しか出来ませんでした。
----hoge.txt----
ABCD,A1,10.5 ,8.3 , 9.5
ABCD,A2,11.5 ,7.3 , 6.5
ABCD,T1,42.5 ,-10.3 , 3.2
ABCD,T2,25.2 ,-220.2 , -1.2
ABCD,T3,-35.5 ,210.3 , -15.2
----------------
希望する取得値は下記の通りで、T3列210.3ではなくT2列-220.2のように
ソート時、符号は無視するが最終的には符号を付けた数値を取得したいのです。
Tmov_x(0) = 42.5
Tmov_y(0) = -220.2
Tmov_z(0) = -15.2
下記をどのように変更すれば良いのかわからないので、どなたか
アドバイスや添削をよろしくお願いします。
For n = 0 To 2
Dim reader As New System.IO.StreamReader("C:\hoge.txt", System.Text.Encoding.Default)
Dim nfMov_x(), nfMov_y(), nfMov_z() As Single
Do Until reader.EndOfStream
line = reader.ReadLine()
field = line.Split(",")
If field(0) = "ABCD" Then
If field(1).Trim.Substring(0, 1) = "T" Then
Do While field(4).Trim.Substring(0, 1) = "T"
ReDim Preserve nfMov_x(T_cont), nfMov_y(T_cont), nfMov_z(T_cont)
nfMov_x(T_cont) = field(2)
nfMov_x(T_cont) = Math.Abs(nfMov_x(T_cont))
nfMov_y(T_cont) = field(3)
nfMov_y(T_cont) = Math.Abs(nfMov_y(T_cont))
nfMov_z(T_cont) = field(4)
nfMov_z(T_cont) = Math.Abs(nfMov_z(T_cont))
T_cont += 1
line = reader.ReadLine()
field = line.Split(",")
Loop
ReDim Preserve nfMov_x(T_cont - 1), nfMov_y(T_cont - 1), nfMov_z(T_cont - 1), _
Tmov_x(cont), Tmov_y(cont), Tmov_z(cont)
Array.Sort(nfMov_x)
Array.Sort(nfMov_y)
Array.Sort(nfMov_z)
Array.Reverse(nfMov_x)
Array.Reverse(nfMov_y)
Array.Reverse(nfMov_z)
Tmov_x(cont) = nfMov_x(0)
Tmov_y(cont) = nfMov_y(0)
Tmov_z(cont) = nfMov_z(0)
cont += 1
T_cont = 0
ReDim nfMov_x(T_cont), nfMov_y(T_cont), nfMov_z(T_cont)
Exit Do
End If
End If
Loop
reader.Close()
Next
お礼
スクリプトまでご紹介くださり、ありがとうございます。 そのまま貼り付ける形で実行できることを確認しました。 貴重な時間を割いていただき、感謝いたします。