重複データを書き込まないようにするには?(VB)

このQ&Aのポイント
  • VB(2010)初心者の方が、ボタンクリックでテキストボックスに入力したデータをテキストファイルに追加書き込む際に、重複するデータを書き込まない方法を知りたいです。
  • 現在のコードでは、重複データのチェックが行われていないため、同じデータが複数回書き込まれる可能性があります。
  • 重複データを書き込まないようにするためには、書き込む前に既存のデータとの重複チェックを行い、重複している場合は書き込まないようにする必要があります。
回答を見る
  • ベストアンサー

重複データを書き込まないようにするには?(VB)

VB(2010)初心者です。 ボタンクリックで、テキストボックスに入力したデータをテキストファイルに 追加書き込みしていますが、同じデータは書き込めないようにしたいです。 下記コードにどのような記述を付け加えたら良いのでしょうか。 Dim fsFile As System.IO.FileStream = System.IO.File.OpenWrite("C:\List.txt") Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(fsFile) sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) sw.WriteLine(TextBox1.Text) sw.Flush() sw.Close() fsFile.Close()

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>下記コードにどのような記述を付け加えたら良いのでしょうか ファイルに (1)何のデータが入っているかを見て (2)入力した物と同じでなければ書き込む と云った処理が必要ですね 具体的にコードを書く際には 1.データとはどのような形式なのか   ただのテキストなのか、カンマ区切りなどの複数要素を持つ物なのか 2.1に加え、同じデータとはどのように判断するのか   完全一致なのか、それとも部分一致なのか 3.入力するデータは一行(一つだけ)なのか、複数行(複数データ可)なのか に気を付けて作る必要があります。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

既に入力したデータを、使いやすいように保持しておくしかない。 これは理屈でそうなるもので、他にはどうしようもない。前に入力したデータが判らないと重複かどうかチェックしようが無い。 (1)その保持するやり方に、後に(といってもその作業が終わるまで)検索するに便利な構造を持ち込んで保持するか、そのままの順序で保持するかなど、考えられる。 またDictionaryなどの仕組みを持つ手もある。 http://wednesdaymoon.net/kzweb/articles/vbnet/article.aspx?articleid=38 エクセルなどは入力したデータはセルに保持されるので、なんらこういうことを考えなくて、検索するだけの問題ですが。 (2)もうひとつは、入力したデータをファイルになったものを読んで調べるかだが、普通はファイルをクローズしないと読めない場合もあり難しいが、ADOのダイナセットのようなもので対処できないかと思うが(VB.NETであるかどうか知らない) (3)配列に入力されたデータで重複をチェックするキーに当たるデータをそれまでの分を保持して、次の入力時にその中に無いかどうかをチェックする。順次探索になるだろう。 これは割合思いつきやすい方法だろう。 (4)入力し終わってから、ファイルの中に重複をさがし、指摘する方法で、妥協(我慢)する方法とか。

関連するQ&A

  • VB.NET テキストファイルにデータを書き込み

    テキストファイル("c:\test.txt")に「かきくけこ」と全角5文字で1行のデータがあるとします。 このテキストファイルに「あいうえお」を先頭に追加で書き込みたいのですが、どうすればいいのでしょうか? あくまで「かきくけこ」を変数化せずファイルに直接、書き込む方法がある場合、教えてください。 'テキストファイルを開いたときの内容 あいうえお かきくけこ ちなみにですが、テキストファイル("c:\test.txt")に「かきくけこ」と全角5文字で1行のデータがあるとして、 末尾に「さしすせそ」を追加で書込みする方法は下記の通りでした。 'ファイルを書き込み用に開く、指定したファイルがない場合は作成する dim fsFile As System.IO.FileStream = _ System.IO.File.OpenWrite("c:\test.txt") 'StreamWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = _ New System.IO.StreamWriter(fsFile) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine("さしすせそ") 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() fsFile.Close() 'テキストファイルを開いたときの内容 かきくけこ さしすせそ

  • .NETで文字列のエンコードの仕方+ファイル操作

    .NETで文字列のエンコードの仕方が知りたいです。 あと、ファイル操作についてわかりやすいホームページを探しています。 '指定したファイルに文字列を追加します Dim filename as String = "test.txt" Dim data as string = "美味ソ溝" System.IO.File.AppendAllText(filename, data, System.Text.Encoding.GetEncoding("euc-jp")) 'これと同じことを以下のStreamWriterでしたいのですが、文字のエンコードの方法がわかりません。どのようにすればうまくいきますか。 Dim filename as String = "test.txt" Dim data as string = "美味ソ溝" Dim fs As System.IO.FileStream = System.IO.File.OpenWrite(filename) Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(fs) sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) '書き込む前にエンコード?? sw.WriteLine(data) sw.Flush() sw.Close() fs.Close()

  • VB2008 txtファイル保存

    こんにちは、Vb2008を勉強しています。 デスクトップに保存している、TXTファイルに、 フォームで入力したデータを追加保存したいと思い、ネットで調べたり…で 入力しましたが、txtファイルを開いてみると文字化けしてしまします。 Dim writer As System.IO.FileStream = _ System.IO.File.OpenWrite("C:\Users\Desktop\顧客管理.txt") 'SystemWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(writer) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine(TextBox1.Text & "," & TextBox2.Text & "," & TextBox3.Text) 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() writer.Close() 上記の方法で文字化けだったので、またまた、調べて入力しましたが 今度は、改行されず…単純な、データの追加のようになってしまっています。 私は、新しい行に追加できるようにしたいです。 下のコードは文字コードの指定をしたので、保存はできますが、 改行されません。 Dim FileName As String = "C:\Users\Desktop\確認.txt" Dim Writer As IO.StreamWriter Dim Encode As System.Text.Encoding '文字コードにShiftJISを指定。 Encode = System.Text.Encoding.GetEncoding("Shift-JIS") '既に存在するテキストに追加する場合は第2引数をTrueにする。 Writer = New IO.StreamWriter(FileName, True, Encode) Writer.Write(TextBox1.Text & "," & TextBox2.Text) Writer.Close() どなたか、教えていただけませんでしょうか?

  • VB.NETでファイル操作

    ファイルをオープンしたまま、ファイル内のデータを何度も読み込みたいのですが、Seekで読み込み位置を先頭にし、Peekでループさせ、一度全部読み込み終わった後、Seek文で先頭に戻し、再度ファイルの先頭から読み込ませようと思ったのですができません。 なぜなのでしょうか? // ファイルオープン StreamReader sr = new StreamReader( (System.IO.Stream) File.OpenRead("C:\\Temp\\Test.txt"), System.Text.Encoding.ASCII); // 最後まで読み出す sr.BaseStream.Seek(0, SeekOrigin.Begin); while (sr.Peek() > -1) { Console.WriteLine(sr.ReadLine()); } // もう一度 sr.BaseStream.Seek(0, SeekOrigin.Begin); while (sr.Peek() > -1) {         ←このWhileの中に入らない。 Console.WriteLine(sr.ReadLine()); } // ファイルクローズ sr.Close();

  • VB2010で動作しない

    vb2010でWindowsアプリを作っている初心者です。 ある文字列を与えたテキストファイルを生成しようと思い、以下のコードを書きました。 VB2010の環境で実行すると、テキストファイルはできないし、何も動作しません。 同様のことを別のPCのVB2005(VS2005)で実行するときちんとファイルが生成しました。 VB2010ではエラーは出ないのですが、動作しません。 何かの参照が悪いのでしょうか。 「sw」のところにカーソルを当てると貼付の画像の内容でした。 「書き込み専用プロパティはサポートされていません。」 と表示されていますが、これと関係あるのでしょうか。 この言葉の意味がよくわかりません。 よろしくご指導下さい。 以下コード ↓ Imports System Imports System.IO Public Class formExportData 'プリント ボタン クリック Private Sub btnExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExport.Click Dim sw As StreamWriter sw = New IO.StreamWriter("C:\Users\Taro\Desktop¥Hoge.txt", False, System.Text.Encoding.Default) sw.WriteLine("テストしています。") sw.WriteLine("この文字がプリントされる。") sw.Close() End Sub

  • VB6 テキストファイルへの保存方法

    みなさん教えてください。 いまVB6.0で、テキストボックス(textbox1)に入力するデータ(数値)を名前を指定するテキストファイルに内容を保存したいと考えています。 これをやろうと、下記のように構文を作成したのですが、何故かうまくいきません。 みなさんアドバイスを頂けないでしょうか。 宜しくお願いします。 Private Sub Command1_Click() Dim StrFN As String Dim sw As System.Io.StreamWriter 'テキストファイルを上書きで保存する StrFN = Application.GetSaveAsFilename("", "測定データ(*.txt),*.txt,全てのファイル(*.*),*.*", , "測定データファイル名指定") 'ダイアログ表示 If Dir(StrFN) <> "" Then If vbYes <> MsgBox("同名ファイルがあります。" & vbLf & _ "上書きしますか?", vbYesNo) Then Exit Sub End If End If sw = StrFN '書込み sw.Write (textbox1.Text) sw.Close () End Sub

  • ファイルの作成からその使用に際して

    VB2008Expressでプログラミング中です。 早速ですが、この度ボタンを押すと3種の.txtファイルを作成し、ある文字列をそこに保存する、といったプログラムが必要になったのですが不具合がでて困っています。 sub createfile() IO.file.create("d:\1.txt") IO.file.create("d:\2.txt") IO.file.create("d:\3.txt") end sub private sub button_click()handles button1.click call createfile() Dim Writer As New IO.StreamWriter("d:\1.txt") Writer.WriteLine(Richtextbox1.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\2.txt") Writer.WriteLine(Richtextbox2.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\3.txt") Writer.WriteLine(Richtextbox3.Text) Writer.Close() end sub といった感じでファイルを作成したらそこにテキストを保存するようにしたいのですが、「ファイルが使用中でアクセスできません」とエラーになります。 いろんなサイトで勉強してみたのですが、いまいち理由がわかりません。どなたか教えていただける方はいませんでしょうか?

  • VB2010 テキスト書き出し位置

    VisualBasic初心者です。 VB2010でフォームでフォームから複数のTextBoxに入力したものを Buttonクリックイベントでテキストファイルに書き込みを行おうと思っています。 その際、テキストファイルへの書き込み位置を指定したいと思っています。 TextBox1の内容はテキストファイルの1文字目から10文字目 TextBox2の内容は11文字目から20文字目という感じにしたいです。 現在下記のプログラムです。 どなたかご教授ください。 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) write_data.Write(Textbox1.text) write_data.Close() End Sub

  • 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のテキスト書き込み読み出し

    VB初心者です。 VBのテキスト書き込み読み出しについて質問させていただきます。 ~使用オブジェクト~ textbox1 textbox2 button1 button2 現在下記の通りtextbox1とtextbox2に書いた文字(length 10まで)をbutton1 clickで C:\test.txtに書き出し、 button2 clickでtextbox1 と textbox2に戻すプログラムを書いてみました。 読み込みのところが現在は2個ですが、実用的には膨大な数にしたいと思っています。 単純に沢山書けばいいのでしょうが現実的ではないのでスッキリと書く書き方はないでしょうか? さらに、例としてtextbox1にAさんの名前textbox2にAさんの年齢をいれたとします。 その際、Bさん以降を登録したいのですがその場合テキストへの書き込みを次行に書き込み 次行を読み込むにはどのように書けばよろしいでしょうか? ご教授お願い致します。 Public Class Form1 '##################################################### '"C:\test.txt"へ書き込み '##################################################### Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) Dim str As String Dim str1 As String str = String.Format("{0, -10}", TextBox1.Text) str1 = String.Format("{0, -10}", TextBox2.Text) write_data.Write(str & str1) write_data.Close() End Sub '##################################################### '"C:\test.txt"の読み込み '##################################################### Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim Reader As New IO.StreamReader("C:\test.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) While Reader.Peek() > -1 '10文字取得 Dim c(9) As Char Dim d(9) As Char Reader.ReadBlock(c, 0, c.Length) Reader.ReadBlock(d, 0, d.Length) TextBox1.Text = c TextBox2.Text = d End While Reader.Close() End Sub End Class

専門家に質問してみよう