いつもお世話になっております。
私は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
No.1ベストアンサー
- 回答日時:
比較用の IComparerを実装したクラスを使えば符号を無視したソートが出来ますよ
Public Class myComp
Implements IComparer
public Funcrion Compare( byVal x as Object, byVal y as Object) As Integer _
Implements System.Collections.IComparer.Compare
dim dx, dy as double
dx = Math.Abs( CType(x,Double) )
dy = Math.Abs( CType(y,Double) )
Return dx - dy
End Function
End Class
といった具合に定義しておきます
テキストファイルから変うすに読み込む際には Math.Absを使わず
nfMov_x(T_cont) = field(2)
nfMov_y(T_cont) = field(3)
nfMov_z(T_cont) = field(4)
そのまま代入します
ソートをする際に
dim oComp as new myComp
Array.Sort(nfMov_x, oComp )
Array.Sort(nfMov_y, oComp )
Array.Sort(nfMov_z, oComp )
Array.Reverse( fnMov_x )
Array.Reverse( fnMov_y )
Array.Reverse( fnMov_z )
といった具合でしょう
なおmyComp.Compareの Return文の引数を dxとdyを入れ替えれば降順のソートも出来ます
早速のアドバイスありがとうございます。
教えて頂いた通りに書き直したところ
うまくいったのですが、
Array.Reverse( fnMov_x )
Array.Reverse( fnMov_y )
Array.Reverse( fnMov_z )
としてしまうことで、小数点第1位以下を踏まえない結果となったため
削除し、
Return dy - dx
とすることで完璧に処理できました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Word(ワード) Word 2016のマクロを Word 2021のWordでキー動作させたい 3 2023/04/12 16:14
- 賃貸マンション・賃貸アパート 無職(賃貸2年分の貯金あり)と障害者(作業所勤務の収入+障害年金)であれば、どちらが審査に通る可能性 4 2022/08/14 00:48
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) VBAのフィルター操作 5 2023/08/08 09:48
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
ファイル名「1.jpg ~10.jpg~...
-
列のどこをクリックしてもソー...
-
DataGridViewの複数列を連動し...
-
excel VBA リストビューの行...
-
構造体型二次元ベクタのソート
-
DataGridViewのソートを止めたい
-
Excelですべての組合せ(重複組...
-
C# DataTableの行をソートしてD...
-
VBScriptで重複レコードを削除...
-
DirectoryInfo型配列ソート(C#)
-
C# DataGridView のヘッダーセ...
-
偶数奇数の判別!!
-
該当のセルのみを2次元配列に入...
-
qsortについて
-
構造体配列の並べ替え
-
DataGridViewで選択行が変わる...
-
DataGridViewソート時に先頭行...
-
DataGridViewでのソート制御
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
ファイル名「1.jpg ~10.jpg~...
-
C# DataTableの行をソートしてD...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
excel VBA リストビューの行...
-
DataGridViewの複数列を連動し...
-
文字列をソートする方法
-
Excelですべての組合せ(重複組...
-
列のどこをクリックしてもソー...
-
n番目に大きい数を求めるアル...
-
Excel VBAで並べ替えをしたい
-
DataGridViewの昇順降順。
-
vbでDataTableの抽出コピー
-
数字文字列のソート方法
-
VB6でデータを昇順に並べ替える
-
VBScriptで重複レコードを削除...
-
ListViewのソートについて
おすすめ情報