CSV保存場所行指定

タグの編集
投稿者 ダスティング  (高校生) 投稿日時 2016/2/22 17:04:23
この前にもCSVについて投稿したものです。
CSVファイルに保存するときに、仮に「1850行目にlabel1のテキストを保存する」ということは可能なのでしょうか...?
よろしければ教えていただけると幸いです...。
高校生ということがあって夕方にしか返答することができません...
迷惑をおかけしてすみません...
投稿者 るきお  (社会人) 投稿日時 2016/2/22 22:16:13
こんにちは。

>CSVファイルに保存するときに、仮に「1850行目にlabel1のテキストを保存する」ということは可能なのでしょうか...?
可能ですが、あまりやらないですね。

基本的にはファイルのアクセスは先頭から末尾に向けて一方向にアクセスしていくもので、特定のポイントだけ読み込んだり、ましてや特定のポイントに文字列を挿入または上書きするということは非常に効率が悪くなります。

大きなデータの読み書きを行いたい場合はCSVのようなファイルではなく、データベースなどを使用します。

>よろしければ教えていただけると幸いです...。
それでもやろうとすると次のようになります。
基本的には、1849行目まで1行ずつ読み込んで、そのまま書き込んで、1850行目だけLabel1を書き込んで、1851行目以降はまた1行ずつ読み込んで書き込むというプログラムです。
ただし、同じファイルを読み込みながら書き込むことはできませんので、いったんファイル名を変更してから処理を開始しています。
'対象のファイル 
Dim fileName As String = "C:\vb\test.csv"

'対象ファイルを別名(newFileName)に変更 
Dim newFileName As String = IO.Path.ChangeExtension(fileName, "rename.csv")
IO.File.Move(fileName, newFileName)

'newFileNameから1行ずつ読んで fileNameに書き込んでいく。 
Using reader As New IO.StreamReader(newFileName)
    Using writer As New IO.StreamWriter(fileName, False)
        Do Until reader.EndOfStream
            '行数 
            Dim lineCount As Integer
            lineCount += 1
            Dim line As String = reader.ReadLine

            If lineCount = 1850 Then
                '1850行目だけはLabel1.Textを書き込む。 
                writer.WriteLine(Label1.Text)
            Else
                writer.WriteLine(line)
            End If
        Loop
    End Using
End Using

'別名(newFileName)で保存したファイルを削除 
IO.File.Delete(newFileName)


>高校生ということがあって夕方にしか返答することができません...
夜もやりましょうよ。
無償のVisual Studio Communityを自宅にインストールすれば最新版のVisual Basicで遊べますよ。
投稿者 ダスティング   (高校生) 投稿日時 2016/2/23 16:09:17
返答ありがとうございます。
るきおさんに教えていただいたコードで試してみたいと思います。
一つお聞きしたいのですがデータベースとはSQLと同じようなものなのですか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/2/23 18:33:02
> データベースとはSQLと同じようなものなのですか? 

SQL とは、「データベース」に対して
データの操作や定義を行うための処理言語の名前です。


SQL については、データベース講座 第3回の4節 あたりから触れられています。
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/index_db.htm
投稿者 ダスティング  (高校生) 投稿日時 2016/2/24 16:09:13
なるほど
ありがとうございます!
データベースのことを少し勉強してみます