C#中如何从一个文本文件读取数字储存到一个byte数组里面


我一个文本文档中有N个二维数组,byte型的中间用#######################分割 数字用空格分隔
我想一次读取一个,放进一个byte[,]数组里面,大小是固定的[15,15],下次在读取下一个   求教各位该怎么办
例如
 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0
 0 0 0 0 0 0 6 0 0 0 0 4 0 0 0
 0 0 0 5 0 0 0 0 0 0 0 4 0 0 0
 0 0 0 1 6 1 1 1 6 1 1 1 1 0 0
 0 0 0 1 0 0 0 0 2 2 2 2 1 0 0
 4 4 4 1 0 4 0 3 2 2 2 2 1 0 7
 0 0 0 3 0 3 0 5 4 2 2 2 1 0 0
 0 0 0 3 0 0 0 0 0 0 0 0 1 0 0
 0 0 0 1 0 0 6 0 0 0 0 4 1 0 0
 0 0 0 3 1 1 0 1 1 3 1 1 0 0 3
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3
 0 0 4 0 0 0 0 0 7 4 0 0 0 0 0
 0 0 0 0 4 0 0 0 0 3 0 0 7 0 0
 0 4 0 3 0 0 0 0 0 0 0 0 7 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
##############################
 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 7 0 0 0 0 0 0 0 7 0 0
 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0
 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7
 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 7 0 0 7 0 0 0 0 0 7
 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7
##############################

8 个解决方案

#1


readbytes();

#2


 FileStream fs = File.OpenRead(filename);

  FileStream fs = FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);

  byte[] data = new byte[fs.Length];

  fs.Read (data, 0, data.Length);

#3



     string _Text = @"0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 
0 0 0 0 0 0 6 0 0 0 0 4 0 0 0 
0 0 0 5 0 0 0 0 0 0 0 4 0 0 0 
0 0 0 1 6 1 1 1 6 1 1 1 1 0 0 
0 0 0 1 0 0 0 0 2 2 2 2 1 0 0 
4 4 4 1 0 4 0 3 2 2 2 2 1 0 7 
0 0 0 3 0 3 0 5 4 2 2 2 1 0 0 
0 0 0 3 0 0 0 0 0 0 0 0 1 0 0 
0 0 0 1 0 0 6 0 0 0 0 4 1 0 0 
0 0 0 3 1 1 0 1 1 3 1 1 0 0 3 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 
0 0 4 0 0 0 0 0 7 4 0 0 0 0 0 
0 0 0 0 4 0 0 0 0 3 0 0 7 0 0 
0 4 0 3 0 0 0 0 0 0 0 0 7 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
############################## 
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 7 0 0 0 0 0 0 0 7 0 0 
0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 
0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 7 0 0 7 0 0 0 0 0 7 
0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 
0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 
##############################";

            string[] _List = _Text.Split(new char[] { '\r', '\n', '#' }, StringSplitOptions.RemoveEmptyEntries);

            IList<byte[,]> _BytesList = new List<byte[,]>();

            byte[,] _Bytes = new byte[15, 15];
            int _ReadIndex = 0;
            for (int i = 0; i != _List.Length; i++)
            {
                if (_List[i].Trim().Length == 0) continue;

                string[] _BytesText = _List[i].Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                if (_BytesText.Length != 15) continue;

                for (int z = 0; z != 15; z++)
                {
                    _Bytes[_ReadIndex, z] = Convert.ToByte(_BytesText[z]);
                }
                _ReadIndex++;
                if (_ReadIndex == 15)
                {
                    _BytesList.Add(_Bytes);
                    _ReadIndex = 0;
                }

            }

#4


谢谢楼上几位的回答,三楼朋友的代码考虑的很全面谢谢

小弟还有个问题,就是假如我文本里面的数组很多我想一个一个读取,而不是一下子读到内存里面来,该怎么办可不可以每次读取某几行,这个函数该怎么用?
谢谢各位前辈了

#5


private void button2_Click(object sender, EventArgs e)
        {
            FileStream fs = new FileStream("test.txt", FileMode.Open);
            int index = 7;//取第几行数据,从0开始,此处可由用户输入
            const int length = 32;//每行的长度,15个字符+15个空格+回车换行2=32
            byte[] buff = new byte[length];
            long line = index * length;//计算第index行前面占用的字节数
            fs.Seek(line, SeekOrigin.Begin);//移动文件流指针位置
            fs.Read(buff, 0, length);//从指定位置读取指定长度字节赋值给buff
            fs.Close();
            
            for (int i = 0; i < buff.Length; i+=2)//i++保留空格,i+=2去掉空格
            {
                Console.Write((char)buff[i]);//输出结果符合要求,buff就是要的结果
            }
            
        }

#6


另外,如果第N行内容是"############",则不是所需要的,可加个判断直接return

#7


文本文件应该用文本模式读写,用StreamReader/StreamWriter
如果文件中不只包含文本,应该用二进制模式读写,BinaryReader/BinaryWriter

#8


StreamReader StreamWriter 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: