質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

2回答

3141閲覧

vb.net listview並べ替える

maymay

総合スコア9

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/08/08 07:52

編集2017/08/08 07:57

VBでファイルの中で時間の順番が並べ替えてほしいです。
(ファイルの中に2000行があります。)
2010 15:03:09
2010 08:03:09
2010 09:07:08
2011 08:07:09
.........
下にコードを書きましたが、実行できなかったです。
お教えてください。

For Each filename In files Dim sr As New System.IO.StreamReader(filename, _ System.Text.Encoding.GetEncoding(932)) 'ストリームの末端まで繰り返す Do While sr.Peek <> -1 ReDim Preserve Line(lineCnt) 'lineにセット Line(lineCnt) = sr.ReadLine() '行の結合 If Not (Line(lineCnt).IndexOf("2010") = 0) Then Line(lineCnt - 1) = Line(lineCnt - 1) & Line(lineCnt) Else lineCnt = lineCnt + 1 End If Loop
Dim temp As String '並べ替えた後の行 Dim val As String '並べ替えた後の時間 For k As Integer = 0 To Line.Length - 1 ReDim Preserve cnt1(k) '年 ReDim Preserve cnt2(k) '時間 Dim i As Integer = 0 Dim j As Integer = 0 While (i < k) j = 0 While (j < k - i) If (cnt1(k) = cnt1(j)) Then If (cnt2(k) > cnt2(j)) Then temp = Line(k) val = cnt2(k) Line(k) = Line(j) cnt2(k) = cnt2(j) Line(j) = temp cnt2(j) = val End If End If j += 1 End While i += 1 End While Next コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

このプログラムを修正する方法ではありませんが、Sortedlistを使ってみてはいかがでしょうか?VB.netであれば使えたと思います。

SortedListのmsdn

VB.net

1 2Dim SortList As New SortedList() 3 4For Each filename In files 5 6Dim sr As New System.IO.StreamReader(filename, _ 7 System.Text.Encoding.GetEncoding(932)) 8 'ストリームの末端まで繰り返す 9 Do While sr.Peek <> -1 10 '今回は年と時間だけなので仮に日付を1/1にして比較用にDatetime型を使う 11 SortList.Add(DateTime.Parse(”取得した文字列を日時に成形”),_ 12 ”出力用の文字列として取得した文字列をそのまま") 13 Loop 14

とすれば、勝手にこのリストの機能で時間でオーダーされたリストが出来上がるのであとは、Forなどで回して文字列に変更してしまえばいいのではないでしょうか?

投稿2017/08/09 01:43

Yuki_S

総合スコア356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もし私なら、上記の文字列を日付型に変換して(年月は1月1日に固定)Listの機能でソートします。

'ファイルからとってくる箇所は割愛 Dim fromList As New List(Of String) fromList.Add("2010 15:03:09") fromList.Add("2010 08:03:09") fromList.Add("2010 09:07:08") fromList.Add("2011 08:07:09") Dim dateList As New List(Of DateTime) For Each rows In fromList Dim array1 = rows.Split(" "c) 'その年の1月1日としてDateTime型に変換 dateList.Add(DateTime.Parse(array1(0) & "/1/1 " & array1(1))) Next 'ここで並び変わっているはず dateList.Sort() For Each rows In dateList Console.WriteLine(rows.ToString) Next

投稿2017/08/09 02:01

編集2017/08/09 02:53
motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問