• 締切済み

[VB] 配列の内容をテキストファイル出力&テキストファイルを配列に入力

AKARI0418の回答

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.2

Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '今回登録するデータ Dim name1 As String = "テスト" Dim score As Integer = 10 'ワーク用エリア Dim rank As List(Of Ranking) = Nothing 'データファイルパス Const datpath As String = "D:\desk\学校ファイル\tez授業\VB\rensyakyo\rensyakyo\bin\Debug\Ranking.txt" 'ファイル読み込み If System.IO.File.Exists(datpath) AndAlso New System.IO.FileInfo(datpath).Length > 0 Then 'ファイルストリームを使用して読み込む Using fr As New System.IO.FileStream(datpath, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read) Try 'シリアライズされたデータの展開 Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter rank = bf.Deserialize(fr) Catch ex As Exception Throw End Try End Using End If 'ファイルなしの場合 If rank Is Nothing Then rank = New List(Of Ranking) End If '追加用データ作成 Dim myrank As New Ranking With {.name = name1, .score = score} 'VB2005以前の場合 'Dim myrank As New Ranking 'myrank.name = name1 'myrank.score = score 'データ追加 rank.Add(myrank) 'スコアの降順にソート rank.Sort(AddressOf hikaku) '登録データのインデックスを取得 If rank.IndexOf(myrank) < 4 Then '状況.Text = "ランクインしました!!" Console.WriteLine("Rank In") Else '状況.Text = "またがんばれよ!""" Console.WriteLine("Out of Rank") End If 'nameいち.Text = rank(0).name 'いち.Text = rank(0).score 'ファイル出力 Using fw As New System.IO.FileStream(datpath, IO.FileMode.Create, IO.FileAccess.Write, IO.FileShare.None) Try 'ワーク用エリアシリアライズして出力 Dim bt() As Byte Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Dim ms As New System.IO.MemoryStream bf.Serialize(ms, rank) bt = ms.ToArray fw.Write(bt, 0, bt.Count) Catch ex As Exception Throw End Try End Using End Sub ''' <summary> ''' ソートロジック ''' </summary> Function hikaku(ByVal x As Ranking, ByVal y As Ranking) As Integer Return y.score - x.score End Function End Class ''' <summary> ''' 格納データのフォーマット ''' </summary> ''' <remarks></remarks> <Serializable()> _ Public Class Ranking Public name As String Public score As Integer End Class こんな感じでやってみてください。

taikoshu1
質問者

補足

ここまで詳しく書いていただいてありがたいのですが、どうしてもエラーが出ます。 ''' <summary> ''' 格納データのフォーマット ''' </summary> ''' <remarks></remarks> <Serializable()> _ 特に↑の部分です。。。 初心者なので申し訳ありません。 ちなみに開発環境はVisual Studio 2008です

関連するQ&A

  • VB 配列の内容をファイルに書き込む

    VB2008を使用しています。 stg_bitという配列に一文字ずつ「abc・・・」 のように入っているものを、テキストファイルに出力したいのですが・・・ stg_bitという配列の内容をファイルに書き込みたいのですが、 うまくいきません。 ご教授お願いします!! Dim i As Integer Dim stg_str As String Dim Writer As New IO.StreamWriter("C:sample.txt") Writer.WriteLine(stg_bit) Writer.Close()

  • vbで出力したテキストファイルを7日後に削除したい

    はじめまして。 vbで出力したテキストファイルを7日後に削除するプログラムを考えております。 参考になるコードもしくは関数、ホームページがありましたら教えてください。 よろしくお願い致します。

  • 数字の入った配列をファイルへ出力。

    今、hist[256]というint型の配列に数字が入っているとします。 これを、テキストファイルに出力して、 0 242 5654 232 3123 756 ・ ・ ・ こんな感じで、ファイルに出力したいです。 文字としての出力になるのでhist[256]配列を、int型からchar型に変換しないとダメでしょうか? また、変換するとしたら、char型だと unsigned char にしても 0~256の値までしか1つの配列に保存できませんよね? もっと大きい数字も入っているので何とかする方法も教えて下さい。 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • csv出力した内容を配列で取得できますか?

    データベースのテーブル内容をサーバー上にcsv出力すると同時に出力した内容を配列で取得できないでしょうか?(PDOを利用しています) $sql= "SELECT id, name FROM tb INTO OUTFILE '/tmp.csv'"; $stmt = $dbh->query($sql); これでcsvは出力されるのですが、csv出力した内容を配列で取得したく、 $array = $stmt->fetchAll(PDO::FETCH_ASSOC); をするとGeneral Errorとなります。 先にSELECTで内容を配列で取得してから配列のループでcsvの内容を作成し、出力する方法もありますが、データ量が数十万件あるのでループ処理が遅い気がしています。 良い方法があればお教えください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • サイズの大きなテキストファイルのSORT

    3GB超のテキストファイルをSORTコマンドでソートしたいのですが、空(0KB)の出力ファイルが出来て処理が終わってしまいます。 数KB~数MBのテキストでは正常にソートされるのですが、GB単位になると上記の現象が発生します。 環境はWindowsNTServer4.0です。 ソートできるファイルサイズの上限、ディスクの空き容量等、制限があるのでしょうか? また、上記の現象を回避し、正常にソートする方法をご存知な方がいらっしゃいましたら、どうぞご教授ください。 宜しくお願い致します。 ↓ソートコマンドは至ってシンプルです。 sort /+1 < TEST.dat > OUT.txt

  • 配列のファイル出力について

    fortranでできるファイルへの配列の出力をC言語でどのようにプログラムするか教えて頂きたいと思います。 2次元配列a(i,j)の出力はfortranでは以下のようなプログラムになります。 open(10,.省略...) ファイルを指定して開く do j=1,ny                ループj   write(10,'(100f10.3)') (a(i,j),i=1,nx) ループi+書き出し enddo                  ループjの最後尾  close(10)                ファイルを閉じる 100f10.3というのは小数点3桁の実数で10カラムで表現したものが100個並ぶという意味です。これと同じことをやるC言語プログラムを教えて頂きたいのですが。私の手元にある本にはやり方が載っていません。 C言語にはfortranのような数字のカラムを指定するようなフォーマットの調整などできるのでしょうか。よろしくお願いします。

  • ファイルの内容を配列に格納したい

    困っているので、皆様の力を貸してください。 以下のようなファイルを読み込み、kのインデックスでソートしてから 配列に格納したいのですがどのようにしたらできますでしょうか? -------------------ファイル内容------------------------------ (= k0 9999) (= k1 1111) (= k2 2222) (= k4 4444) (= k3 3333) ------------------------------------------------------------- 上のファイルの場合は int[0] = 9999; int[1] = 1111; int[2] = 2222; int[3] = 3333; int[4] = 4444; といったように配列に格納したいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • テキストファイルクリア .net2005 VB

    VB初心者です。よろしくお願いたします。 現在 .net2005 VBでPL/SQLの処理結果を「log.txt」に出力しておりますが、処理をするたびに、テキストファイルの下へどんどん追加されます。 そこで、画面上からログクリアボタンを押下すると、「log.txt」の中身が初期化されるようにしたいと考えて降ります。 どうすればよいか、サンプルのロジックを教えて頂けませんでしょうか?

  • GB2312、BIG5でのテキスト出力

    ちょっと興味を持った内容なのですが…。 簡体字・繁体字テキストを開く場合は、(ツールにもよりますが)文字コードとして 掲題のものを指定して開けば問題無いかと思います。 またプログラミングでこれらのテキストを読み込む場合も、単に向こうのコードということを 念頭に置いて処理すれば同様に問題無いかと思います。 しかし、BIG5などをプログラムからテキスト出力させることは可能なのでしょうか? UNICODE系ならファイルの先頭に特定のコードを付与すれば良いようですが、 例えば「UTF8で書かれたテキストをGB2312にして出力」するには どのように設定すれば良いのでしょう?

  • 配列のファイルへの出力について

    fortranでできるファイルへの配列の出力をJAVAでどのようにプログラムするか教えて頂きたいと思います。 2次元配列a(i,j)の出力はfortranでは以下のようなプログラムになります。 open(10,.省略...) ファイルを指定して開く do j=1,ny                ループj   write(10,'(100f10.3)') (a(i,j),i=1,nx) ループi+書き出し enddo                  ループjの最後尾  close(10)                ファイルを閉じる 100f10.3というのは小数点3桁の実数で10カラムで表現したものが100個並ぶという意味です。これと同じことをやるJAVAプログラムを教えて頂きたいのですが。私の手元にある本にはやり方が載っていません。 JAVAにはfortranのような数字のカラムを指定するようなフォーマットの調整などできるのでしょうか。よろしくお願いします。 この質問は、C言語について以前質問したものですQNo.3590702。 JAVAだったらどうなるだろうと思ってお尋ねしています。

    • ベストアンサー
    • Java