C#でテキストファイルを2進数で取得&配列に格納する方法

このQ&Aのポイント
  • C#でテキストファイルから1行ずつ読み取り、それをbyte型に保存する方法について解説します。
  • 具体的には、テキストファイルに記入されている8桁の2進数を読み取り、byte配列に格納します。
  • C#初心者でも理解しやすいように、ファイルの読み込みからデータ変換、出力までの手順を説明します。
回答を見る
  • ベストアンサー

【C#】テキストファイルを2進数で取得&配列に格納

http://okwave.jp/qa/q7812279.html 前回の質問が分かりにくかったため、もっと詳しく書いていこうと思います。 テキストファイルを1行ずつ読み取り、それをbyte型に保存したいです。 例:test.txt 01001000 01110000 01010100 11100110 01010101 ↑のような8桁の2進数がテキストファイルに記入されています。 そのテキストファイルを読み取り、 byte配列に格納したいです。 例: byte[0]に01001000 byte[1]に01110000 byte[2]に01010100 byte[3]に11100110 上記のようにデータが格納されるよう、 ファイルを読み取り、配列に入れたいと思っています。 C#初心者のため、右も左も分からないのですが、 とりあえず、やろうとしている流れを以下に書きます。 (1)ファイルを読み込む (2)ArrayListに格納 (3)データ変換(文字列を2進数に) (4)データの出力(byte型) ArrayListでなくても構わないのですが、 他にいい方法が思いつかなかったので…。 言いたいことがぐちゃぐちゃになってきたのでまとめると、 byte[0]にファイルから読み取った1行のデータ(01001011等)を byte型で入力したい。 ということです。 分からなければ、コメントお願い致します。 文章が雑で分かりにくいかもしれませんが、回答頂けると嬉しいです。

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

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

こんなんでいいんかの。 using System; using System.IO; namespace BaseConversion { class Program { static void Main() { byte[] result = Array.ConvertAll(File.ReadAllLines("binary.txt"), line => Convert.ToByte(line,2)); // 結果の確認 foreach ( byte b in result ) { Console.WriteLine(b); } } } }

catsmoon
質問者

お礼

実行してみたのですが、上手く行きませんでした(出力データが10進数) やはり、C#は難しいですね・・・

catsmoon
質問者

補足

回答ありがとうございます^^ 明日、試してみたいと思います! わざわざプログラムを書いていただきありがとうございます!

その他の回答 (2)

回答No.3

> 実行してみたのですが、上手く行きませんでした(出力データが10進数) どこが「上手くいきません」なんですか? 2進で出力するだけのことじゃないですか。

catsmoon
質問者

お礼

回答ありがとうございました! 色々試してみた結果、無事上手くプログラムを組むことができました。

catsmoon
質問者

補足

Consoleに表示されるものが10進数でした。

  • FoolWord
  • ベストアンサー率73% (14/19)
回答No.1

ファイルから読込んだ文字列をBYTE型に変換するということでいいのでしょうか? byte[] buf = new byte[1]; buf[0] = Convert.ToByte("01001000", 2); こんな感じでいいのですかね?

catsmoon
質問者

お礼

回答ありがとうございました! 色々試してみた結果、無事上手くプログラムを組むことができました。

catsmoon
質問者

補足

回答ありがとうございます^^ そうです! うーん・・・? あぁ、"01001000"のところに変数を入れれば良い感じですか!

関連するQ&A

  • C#で、ファイルのデータを取得し、配列に格納

    C#を始めたばかりで分からないことも多いため、質問させていただきます。 C#で、テキストファイルにある2進数の数値 例: 00111100 11111100 00010100 のような8桁のデータをC#でテキストファイルから2進数のまま読み取り、 配列に格納したいです。 上の例で考えると、 byte[0]に 00111100 byte[1]に 11111100 byte[2]に 00010100  のデータが入力されているような感じです。 ArrayListを使用する方法や、 バイナリファイルで読み込む方法などもあると思うのですが、 データを1行ごとに配列に入力し、 それを見た目どおり2進数として格納する方法が分かりません。 やはり、文字コードなどを参考に、 1文字ずつ格納し、引き算していくしか方法はないのでしょうか? 文章が分かりにくくて申し訳ないのですが、回答いただけるとありがたいです! よろしくお願いいたします。

  • ファイルの読み込み、配列に格納

    お世話になります。Java初心者です Javaプログラムを実行する同じディレクトリにあるテキストファイルとデータファイルをコマンドラインで同時に読み込み それぞれ違う配列に格納したいのですが、1つのファイルの読み込みは出来ても2つ同時の読み込みと配列格納でつまづいています。 読み込むテキストファイルには以下のような1行の文が、 Dr. Fujita is great! 読み込むデータファイルには以下のような文字が書かれています。 AC 4C 7C 10C KC 3D 6D 9D QD JB 3C 6C 9C QC 2D 5D 8D JD JA 2C 5C 8C JC AD 4D 7D 10D KD 配列に格納する際、テキストファイルの場合は全て大文字にし、アルファベット以外の記号(スペース含)は全て消して配列に格納します。 上の例でいえばこのような状態で格納です↓ DRFUJITAISGREAT データファイルの場合は、2組1文字をそのまま配列に格納です。ただしスペースは飛ばします。 上の例でいえば、ACを配列0に、4Cを配列1に、7Cを配列2に、、、と格納していきます。 import java.io.*; public class sample{ public static void main(String[] args){ try{ FileReader f = new FileReader(args[0]); BufferedReader b = new BufferedReader(f); Strings; while((s=b.readLine())!=null){ System.out.println(s); ←読み込んでるか確認 } }catch(Exception e){ System.out.println(no file); } } } ファイルの指定は実行時に、java sample datafile.dat textfile.txt と指定します。 読み込むプログラムは以上のように書いたのですが、2つファイルを読み込むにはどのように記述したらよいのでしょうか。 FileReaderを2つ作成?しても最初に指定したデータファイルの内容がまた読み込まれるだけで・・・ 読み込んだら変数sに入りますが、たとえばs.substring()なんかでわけて配列に入れようとしても、s.substring()←ここでエラーが出てしまいます。 あと、Dr. Fujita is great!のアルファベットを大文字にし、記号(スペース含)を飛ばして格納するにはどうしたらよいのでしょうか。 宜しくお願いします

    • ベストアンサー
    • Java
  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • ファイルから一行を読み込み配列に格納したい

    すみません、初心者です。Javaでテキストファイルから一行の文字列を読み込み、Stringの配列に格納したいと思っています。具体的には、マシンの/tmp/test.txtを読み込み、空白行は無視して格納したいです。ウェブを参考にして、以下のようには出来たのですが、最初にStringの配列を20個宣言しており、これをどうにかテキストファイルの行(マイナス空白行)の数だけ宣言させたいです。(理由はファイルによっては想定以上の個数の場合も有り得ますし、余分なメモリを使用することになるのと、後からこの配列を使用しやすい、といった諸々で。。)以下のコードをどのように変えると実現出来るかご教示頂けませんでしょうか。 (一行あたりの文字列はつながっており、空白が間に入る事はありません) import java.io.*; public class test { public static void main(String[] args) throws Exception { int i=0; String[] str = new String[20]; FileReader fr = new FileReader("/tmp/test.txt"); StreamTokenizer st=new StreamTokenizer(fr); while(st.nextToken()!=StreamTokenizer.TT_EOF) { System.out.println(st.sval+" "); str[i]=st.sval; i++; } fr.close(); } } (test.txtが以下の場合) ----------------------- fdjosa djsoafdjfdajof jsoafds fdsaoofdafd fdjso fjds ----------------------- (配列は以下になることを想定) str[0]=fdjosa str[1]=djsoafdjfdajof str[2]jsoafds str[3]=fdsaoofdafd str[4]=fdjso str[5]=fjds (*配列数であるstr.lengthは6)

    • ベストアンサー
    • Java
  • php配列格納

    $lines = file ('db.csv'); 上記でファイルの中身を配列に入れますがその逆で データを配列にして格納したいのですがどうすればいいのでしょうか? ファイルの不要な行を除いて再度変数に配列で格納しファイルを作成 したいのです。

    • ベストアンサー
    • PHP
  • テキストファイルの各行を配列に格納するには?

    お世話になります。vb6でテキストファイルを読み込み、各行を配列に格納するコードを教えて下さい。

  • C言語でテキストファイル内の行列を配列に格納する方法

    C++6.0を使っています。 -0.30192   -0.01216 ・・・  0.055553 0.109746   -0.01408 ・・・  0.087976    ・        ・    ・      ・    ・        ・       ・   ・    ・        ・           ・ -0.31596   -0.05106 ・・・  0.041131 上のような行数約1500、列数7のデータがテキストファイルに保存されている時、次のような配列 data[2000][7] にひとつずつ格納する方法を知りたいです。 初心者なのでネットで調べてみてもよく分かりませんでした。 よろしくお願い致します。

  • Visual C++を 用いたテキストファイル読み込み(応用)

    Microsoft Visual C++ 2008 Express Editionを使っています。 テキストファイルは 約5000行×6列の数値(のみ)になっております。(列間にスペースあり) いくつかある5000×6行テキストファイルの中から、ファイル名を入力することで任意のテキストファイルにアクセスし、さらに6列のデータをそれぞれ別の配列に格納するコンソールプログラムを考えていますが行き詰まっています。例えば、1列目を配列1、2列目を配列2、・・・といった具合です。 詳しい方、どうかよろしくお願いいたします。

  • 配列にtxtファイルの各行を格納する際の問題点の解決法を教えてください。

    お世話になります。vb2005を使用しています。 以下のコードでテキストファイルを各行ごとに配列に格納したのですが 以下のコードだと100行など、あらかじめ指定した数の行でないと 配列に格納できないので読み込んだテキストファイルの行数分だけ 配列に格納するにはどう改善すればよろしいでしょうか? 教えてください。お願いします。 Dim Reader As New IO.StreamReader("C:\list.txt") Dim url(100) As String Dim k As Integer = 0 Do While Not Reader.Peek() = -1 url(k) = Reader.ReadLine k += 1 Loop Reader.Close() Reader = Nothing

  • C言語 文字列格納

    テキストファイルから整数データ又は文字列を読み込んで配列に格納する動作についての質問です。 テキストファイルが1行区切りの整数型なら1次元配列で for(i = 0; i < maxSize; i++) { fscanf(fp,"%d", &data[i]); } テキストファイルが1行区切りの文字列なら2次元配列で for(i = 0; i < MAXSIZE; i++) { if (fscanf(fp,"%s", &data[i][300]) == EOF) break; } for(j = 0; j < i; j++) printf("%s\n", data[j]); みたいな具合に格納できたんですが、 テキストファイルが1行区切りのデータではなく、空白文字区切りの文字データだった場合、それぞれどのようにして配列に格納すればいいかがわかりません。 イメージとしては、1文字目から見ていって空白が出ればそこで切って格納していくというかんじなのですが・・・ 質問の内容がわかりにくいかもしれませんが、是非教えてください。お願いします。

専門家に質問してみよう