作者stu87616 (以光为名)
看板C_Sharp
标题[问题] 从文字档读取数字转换成bool储存的效率
时间Thu Nov 29 02:03:45 2012
有一个txt纯文字档,里面就是塞满了1和0,像是这样
1 0 1 0 0
0 0 0 0 0
1 0 0 1 1
0 0 0 0 0
1 1 1 1 0
想要把这些数值存成二维bool阵列,
现在我的做法是一行一行读,然後再用个回圈读这行里面的字元,像是这样
for (int i = 0; i < line.Length; i++)
{
if (line[i] == 1)
//存入一个true
else if (line[i] == 0)
//存入一个false
}
//下一行...
虽然作法可行,但觉得效率很差,
C#不像C++可以让数值直接强制转换成bool,需要过一个if else的判定,
觉得应该就是这部分拖慢了(不知道我有没有理解错误)
不知道有没有更好的做法?
我的txt非常单纯,就是1和0而已,
中间用空格分开,每行成员数量固定,行数则不一定(应该没差吧?)
--
1F:推 timmysas: 风中白头翁头白中风<--台大动物研究所高材生
2F:推 suhaw: 床上女子和子女上床<--台大家庭研究所高材生
3F:推 MyCuteTaitai:景美衣内有内衣美景<--台大城乡研究所高材生
4F:推 starseven: 中国山中有中山国中<--台大教育研究所高材生
5F:→ ruruking: 较南韩全国全韩南叫<--台大外交研究所高材生
6F:推 AllenbeaR: 妈祖你干麻干你祖妈<--台大宗教研究所退学生
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.163.68.144
※ 编辑: stu87616 来自: 1.163.68.144 (11/29 02:05)
7F:→ ssccg:所以你是要问什麽? 跟C比的确多一步因为就是不同type 11/29 03:47
8F:→ ssccg:但那是一定要的,也不是那边最慢,准备空间、读档、切字串 11/29 03:49
9F:→ ssccg:这些都还比较花时间... 真要说的话你的else後面条件是多的 11/29 03:53
11F:→ optimist9266:我好奇input文件为什麽要用纯文字,存成byte不是更 11/29 11:42
12F:→ optimist9266:快吗?而且档案也小一半 11/29 11:42
14F:→ optimist9266:要更快的话,我记得可以用unsafe直接把值写入记忆体 11/29 11:48
感谢上位两位版友的指点,现在专案内的文件跑起来都没问题了,
不过换卡在读取文件的内容上,我不知道是不是编码哪里要设定之类的,
这方面一直蛮苦手的,我目前是这样写:
BinaryReader br;
FileStream fs;
fs = File.OpenRead("FileName.txt");
int leng = (int)fs.Length;
bool[] data = new bool[leng];
for (int i = 0; i < leng; i++)
data[i] = br.ReadByte() == 1;
基本上内容都是翻找网路资料和MSDN拼起来的ˊ_>ˋ
现在有一个问题是br.ReadByte()读到的资料1会是49,0是48,也就是ANSI码,
而不是1和0,不知道是不是哪边弄错了,虽然问题好像不大,把判定的1改成49就好。
另外空格会是32,换行则是两格(反正都是ANSI),
虽然应该也是可以写判定式去忽略掉,不过感觉我这样的做法不是正解。
恳请高手解惑。
※ 编辑: stu87616 来自: 120.125.11.201 (11/29 14:07)
15F:→ optimist9266:我是说input文件当初为什麽不直接把资料用byte方式存 11/29 14:22
16F:→ optimist9266:49跟48是因为你文件内部存的是ANSI的编码 11/29 14:23
喔喔,我懂了,因为来源档不是我负责处理的,
所以我现在该再用另一个小程式把这个来源档转成纯Byte吗?
那这样的话应该就做不到换行了对吧?
※ 编辑: stu87616 来自: 120.125.11.201 (11/29 14:27)