【VB.Net】バイト型配列に読み込んで改行区切り

このQ&Aのポイント
  • ファイルをバイト型配列に読み込んで、ある固定長に区切って出力する方法について教えてください。
  • バイト型で処理を行い、改行区切りでファイルの内容を出力する方法を教えてください。
  • VB.Netを使用して、バイト型配列に読み込んだファイルを改行区切りで出力する方法を教えてください。
回答を見る
  • ベストアンサー

【VB.Net】バイト型配列に読み込んで改行区切り

教えて下さい。 ファイルをバイト型配列に読み込んで、ある固定長に区切(改行)って出力したいです。 以下簡単にサンプルとして作っているのが以下です。 【読み込みファイル.txt】 ---------------------------------------------------------------------------------- AB ---------------------------------------------------------------------------------- このテキストファイルの内容(byte型では、"41 42")を1バイトづつに改行で区切りたいです。 【VB.Net】 ---------------------------------------------------------------------------------- Dim BUFSIZE As Integer = 1 ' 1バイトづつ処理 Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ Dim readSize As Integer ' Readメソッドで読み込んだバイト数 Dim srcName As String = "C:\Temp\読み込みファイル.txt" ' 読み込みファイル名 Dim dstName As String = "C:\Temp\書き込みファイル.txt" ' 書き込みファイル名 Using src As New FileStream(srcName, FileMode.Open, FileAccess.Read) Using dest As New FileStream(dstName, FileMode.Create, FileAccess.Write) While True ' 1バイト読み込み readSize = src.Read(buf, 0, BUFSIZE) ' 読み込むものが無ければ終了 If readSize = 0 Then Exit While ' 改行いれたい部分(動かないけど、、、) buf = (0D,0A) ' 書き込み dest.Write(buf, 0, BUFSIZE) End While End Using End Using ---------------------------------------------------------------------------------- ↓ 理想の処理後 【書き込みファイル.txt】 ---------------------------------------------------------------------------------- A B ---------------------------------------------------------------------------------- 重要なのはバイト型で処理を行いたいです。(文字列ではない) すいませんがよろしくお願いします。

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

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

While True ' 1バイト読み込み readSize = src.Read(buf, 0, BUFSIZE) ' 読み込むものが無ければ終了 If readSize = 0 Then Exit While ' 書き込み dest.Write(buf, 0, BUFSIZE) ' 改行コード書き込み dest.Write(new Byte(){&H0D, &H0A}, 0, 2) End While

wansui
質問者

お礼

あの~、あなたはどこの天才さんですか? 一瞬で解決しました!まぢありがとーです!^^vぴーす

関連するQ&A

  • [VB.NET] テキスト出力で困ってます(T△T

    すいません、教えて下さい。 Byte型で読み込んだ内容を指定した固定長で出力したいです。 例えば、次のテキストファイルがあります。 【読み込み元.txt】 ------------------------------------------------------- ABC123 ------------------------------------------------------- 文字コードをSJISとしてバイナリ値では「41 42 43 31 32 33」となります。 この値を次のように出力したいです。 【出力先.txt】(3バイト区切りとする) ------------------------------------------------------- 414243 313233 ------------------------------------------------------- なんとか自力で近しい?とこまで行けたのかなと思いますが 肝心の出力がうまくいきません。 【VB.Net】 ------------------------------------------------------- Dim BUFSIZE As Integer = 2048 ' 1度に処理するサイズ Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ Dim readSize As Integer ' Readメソッドで読み込んだバイト数 Dim srcName As String = "C:\Temp\A.txt" ' 読み込み元 Dim detName As String = "C:\Temp\B.txt" ' 出力先 ' 処理開始 Using src As New FileStream(srcName, FileMode.Open, FileAccess.Read) Using dest As New FileStream(destName, FileMode.Create, FileAccess.Write) While True ' 読み込み readSize = src.Read(buf, 0, BUFSIZE) ' 読み込むものが無ければ終了 If readSize = 0 Then Exit While ' 直接16進数を指定固定長で書き込みしたい部分 For i As Integer = 0 To readSize - 1 msgbox buf(i) Next ' 書き込み実行 dest.Write(buf, 0, readSize) End While End Using End Using ------------------------------------------------------- 大変お手数ですがご教示頂ければと思います。

  • VB2005で、ファイル操作 VB6から触っていないので感覚がいまいち。

    VB2005で、ファイルを読み込み2行目から10行までを別ファイルに吐き出すコードがわからないのですが、 わかる方教えていただますか? 途中まではできたのですが、後がわかりません。 よろしくお願いいたします。 また、VB2005でわかりやすい書籍など紹介していただけましたら助かります。 'ファイルを開く Dim fs As New System.IO.FileStream(fileName, _ System.IO.FileMode.Open, System.IO.FileAccess.Read) 'ファイルを読み込むバイト型配列を作成する Dim bs(fs.Length - 1) As Byte 'ファイルの内容をすべて読み込む fs.Read(bs, 0, bs.Length) '閉じる fs.Close() ....[改行をLFとした場合に2行から10行目の内容を別のファイルに書き出すコード]

  • ファイルのロック

    VB2005です。 以下のコードでファイルを読み取り専用モードで開いています。 FileStream("ファイルパス", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) 開くファイルはテキストエディタ等で開くだけでも1分近くかかるファイルです。 上記コードでも、開いているであろう時間(約1分)くらいは ファイルをロックしているようです。 開ききってしまえば、ロックは解除されているようなのですが。 やはりそのファイルを開ききるまではロックしてしまうのでしょうか? これをロックさせない方法はありますか? やりたいことは、開いたファイルの内容を 特定なバイト数で区切、改行キー(終端記号)を加えて 別のファイルに書き出しています。

  • VBAでテキストファイルの改行を無視する方法

    VBAでテキストファイルにある文字列を配列の変数に格納したいのですが、改行が含まれているとそこから2バイトずつずれてしまいます。 1行毎に読もうとしても1行の文字列が6000バイトぐらいあるので変数に格納しきれません。 読み込むテキストファイルは _________0_________1_________2・・・・________10 _______100________51 のようになっており、10バイトずつ変数に格納していきたいです(スペースも格納する必要あり) 以下のように作ったのですが、改行のあるところからずれてしまいます。 Sub ファイル読み込み() Dim buf(30000000) As String Dim i As Long i = 0 With CreateObject("Scripting.FileSystemObject") With .OpenTextFile("C:\test.text", 1) Do While .AtEndOfStream <> True buf(i) = .read(10) Loop End With End With End Sub 「次の文字列が改行コードである」ということが分かれば.skipで飛ばせるのですが、その判定式が探しても見つかりません。 どなたかご教授よろしくお願いします。

  • [VB.NET] 処理の高速化を行いたい。

    教えて下さい。 あるファイルの1バイトづつローテートを行いファイルの書き出しを行っています。(ビット演算による暗号化) しかし以下の処理の場合、サイズの大きいファイルを扱った場合に多くの処理時間がかかってしまいます。 もっと処理を高速化する事は可能でしょうか? ----------------------------------------------------------------- ' 読み込みファイル Private Const READ_FILE As String = "c:\temp\date.Text" ' 書き込みファイル Private WRIT_FILE As String = "c:\temp\date.dat" ' オブジェクト作成 Dim br As New System.IO.FileStream(READ_FILE, IO.FileMode.Open, IO.FileAccess.Read) Dim bw As New System.IO.StreamWriter(WRIT_FILE, False, System.Text.Encoding.GetEncoding("iso-8859-1")) Dim m As Integer = 3 ' 3ビット左回転 Dim n As Integer ' 1バイトづつ処理 For I As Integer = 0 To CType(br.Length, Integer) - 1 ' 16進数を10進数へ変換 n = ("&h" & String.Format("{0:X2}", br.ReadByte)) ' mビット左へローテート処理を行いファイルへ書き込み bw.Write(ChrW("&h" & Hex(Int((n / 2 ^ (8 - m)) + (n * 2 ^ m And 255))))) Next ' 閉じる bw.Close() br.Close() ----------------------------------------------------------------- よろしくお願いします。

  • VB6.0 改行コードのないファイルの読み込み

    VB6.0で改行コードが無く、半角と全角文字が入り混じっているファイルの読み取り方法を教えて下さい。 通常の一行読み込みの範囲を大幅に超えている文字列です。 他のサイトで以下のようなプログラム(20バイトずつ切り取って読む)を見つけたのですが、 Dim InFileNo As Integer Dim Buf As string * 10 Dim LINE As Long InFileNo = FreeFile Open "C:\test.txt" For Random As #InFileNo Len = 20 LINE = 1 Do Until EOF(InFileNo) Get #InFileNo, LINE, buf LINE = LINE + 1 Loop これだと、半角と全角が混じっている箇所で文字化けを起こしてしまいます。 以上です。よろしくお願い致します。

  • windowsのC#での話です。あるプロセスが断続的(数秒程度で一定し

    windowsのC#での話です。あるプロセスが断続的(数秒程度で一定しません)に、ログファイルをオープンして内容を書き込んでファイルをクローズして、、、ということをやっています。で、そのログファイルをtail -fコマンドのように監視するコードを書きたいのですが、どのように書けばいいのかわかりません。FileStream("logfile.txt", FileMode.Open, FileAccess.Read, FileShare.Read)としてファイルをオープンし、ファイルの最後までseekして、それ以降は永久に、1秒sleepしては該当ファイルの内容を読み込み続ける、というプログラムを書いたのですが、このコードを実行すると、このオープンしたログファイルを他のプログラムからは書き込みのために新たにopenできなくなるようで、他のプログラムがログファイルの書き込みでエラーを出力するようになってしまいました。 tail -fをc#で書くにはどのようなコードを書けばいいのでしょうか。ご教授ください。

  • [C#]FTPでの複数のファイルのアップロード

    ネットで調べたところ1つのファイルであれば、 下記の記述でアップロードできることがわかったのですが、 別々のフォルダにあるにファイルを複数同時にアップロードするプログラムがわかりません。 どなたかご教示ください。よろしくお願いいたします。 using System; using System.Net; using System.IO; class FtpWebPut {  static void Main()  {   string uri = "ftp://servername/Upload/secret.png";   string myFile = "tmp.png";   WebRequest req = WebRequest.Create(uri);   req.Credentials = new NetworkCredential("user01", "mypassword");   req.Method = WebRequestMethods.Ftp.UploadFile;   using (Stream st = req.GetRequestStream())   using (FileStream fs = new FileStream(myFile, FileMode.Open))   {    Byte[] buf = new Byte[1024];    int count = 0;    do    {     count = fs.Read(buf, 0, buf.Length);     st.Write(buf, 0, count);    }    while (count != 0);   }  } }

  • 画像ファイルの幅と高さを取りたい。

    C Sharp、.Net 2.0の環境で開発しています。 using (System.IO.FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read)) { imagew = System.Drawing.Image.FromStream(fs).Width; //横幅 imageh = System.Drawing.Image.FromStream(fs).Height; //高さ } ※filePathに画像のパスを入れてます。 上記で画像ファイル(すべてjpg)の縦横の高さを取得しているのですが、 ファイルが大量にあると途中でOutOfMemoryExceptionが発生してしまい 困っています。 メモリ不足にならない、何か別のやり方があればご教授いただけないでしょうか。 宜しくお願いいたします。

  • バイト配列のバイト数の設定方法を教えてください

    下のようなコードでWebページのソースを取得して、 そのページのコードを解析して、文字化けのない正常な状態で 変数にソースコードを代入するプログラムなのですが、 バイト配列に代入するためのバイト配列の配列数ですが、 5000などとするとページの途中まで正常に取得できるのですが、 多めにと思って50000とかとすると文字化けしてしまいます。 多すぎるとだめなようなのですが、これをぴったりの数値で設定するには ページのバイト数はどのように取得したら良いでしょうか? 下のコードのGetCode(bs)というのは http://dobon.net/vb/dotnet/string/detectcode.html のページにあるコード解析関数の呼び出しの部分です。 Dim txt As String = "http://www.yahoo.co.jp" Dim wc As New System.Net.WebClient Dim fs As System.IO.Stream = wc.OpenRead(txt) Dim bs(5000) As Byte 'byte配列に読み込む fs.Read(bs, 0, bs.Length) fs.Close() '文字コードを取得する Dim enc As System.Text.Encoding = GetCode(bs) 'デコードしてtxtに代入する txt = enc.GetString(bs) よろしくお願いいたします。

専門家に質問してみよう