C#中如何从文件读取一格式化字符串

时间:2022-06-25 12:09:55
比如说我有一个文件里面有一行字符串是Tx:202554Bytes  341Pkts
我想得到的是那两个数字,我知道在C中可以用格式化来读取,如
fscanf(myFile, "Tx:%I64uBytes  %I64uPkts",&ll_TxByte,&ll_TxPkt);
这样我就可以得到ll_TxByte==202554和ll_TxPkt==341
C#中是否可以做到这样呢??
谢谢

15 个解决方案

#1


可能需要拆分!

#2


C#中的StreamReader类,File类可以看看

#3


StreamReader读出来的是字符串,我是想要把这字符串按照格式化读出来,这样子我就可以得到里面的数字了,这样怎么做啊??????

#4


我也很想知道,帮你顶一下~~~呵呵

#5


再顶一下,召唤达人

#6


string类有ToInt32、ToDouble等方法啊,读入string之后使用
Convert.ToInt32(string.substring(begin,length))就可以得到数字了

#7


那么具体到这里,要怎么转换??因为数字是不定长度的,所以我想没办法指定length来截取吧??

#8


如果用split函数,难道要用string.split("B")来分割??我觉得这样也太不好了吧

#9


你的文本里,只有一行或几行是这种格式,先查找到再取出其中的数字,还是说全都是这种格式,要按行取出这样的数字

如果是前者,根据什么找到这样的行
如果是后者,只有数字是变化的吗

#10


正则匹配?
能实现的方法很多。真正要这么高效的我完全想不出来。观望。。。

#11


读取出字符串以后使用正则匹配,过客老大已经发话了,俺们就不跟着掺和了。
嘿嘿……

#12


正则不太会,不过我的想法是eggflowers() 的方法
string类有ToInt32、ToDouble等方法啊,读入string之后使用
Convert.ToInt32(string.substring(begin,length))就可以得到数字了
之前价格循环  呵呵。有点麻烦。。。

#13


to lxcnn(过客):是所有行都是这种格式。
确实,用正则匹配是可以读取到数字,不过我觉得无法做到像C这样简单高效。

#14


正则在处理这类问题上效率是个问题,下面这种方法处理,效率上倒是会比正则方法提高一倍多,但是缺点是不够通用

string test1 = "Tx:202554Bytes  341Pkts";
string[] temp = test1.Split(new string[] { "  " }, StringSplitOptions.RemoveEmptyEntries);
string bytes = temp[0].TrimStart("Tx:".ToCharArray()).TrimEnd("Bytes".ToCharArray());
string pkts = temp[1].Trim().TrimEnd("Pkts".ToCharArray());


正则方法也给出来吧
string test = "Tx:202554Bytes  341Pkts";
string bytes = string.Empty;
string pkts = string.Empty;
Match m = Regex.Match(test, @"Tx:(\d+)Bytes  (\d+)Pkts");
if (m.Success)
{
    bytes = m.Groups[1].Value;
    pkts = m.Groups[2].Value;
}

#15


1、你在文件里以行为单位放置。
2、读取的时候,以空格把字符串分解成字符串组。

#1


可能需要拆分!

#2


C#中的StreamReader类,File类可以看看

#3


StreamReader读出来的是字符串,我是想要把这字符串按照格式化读出来,这样子我就可以得到里面的数字了,这样怎么做啊??????

#4


我也很想知道,帮你顶一下~~~呵呵

#5


再顶一下,召唤达人

#6


string类有ToInt32、ToDouble等方法啊,读入string之后使用
Convert.ToInt32(string.substring(begin,length))就可以得到数字了

#7


那么具体到这里,要怎么转换??因为数字是不定长度的,所以我想没办法指定length来截取吧??

#8


如果用split函数,难道要用string.split("B")来分割??我觉得这样也太不好了吧

#9


你的文本里,只有一行或几行是这种格式,先查找到再取出其中的数字,还是说全都是这种格式,要按行取出这样的数字

如果是前者,根据什么找到这样的行
如果是后者,只有数字是变化的吗

#10


正则匹配?
能实现的方法很多。真正要这么高效的我完全想不出来。观望。。。

#11


读取出字符串以后使用正则匹配,过客老大已经发话了,俺们就不跟着掺和了。
嘿嘿……

#12


正则不太会,不过我的想法是eggflowers() 的方法
string类有ToInt32、ToDouble等方法啊,读入string之后使用
Convert.ToInt32(string.substring(begin,length))就可以得到数字了
之前价格循环  呵呵。有点麻烦。。。

#13


to lxcnn(过客):是所有行都是这种格式。
确实,用正则匹配是可以读取到数字,不过我觉得无法做到像C这样简单高效。

#14


正则在处理这类问题上效率是个问题,下面这种方法处理,效率上倒是会比正则方法提高一倍多,但是缺点是不够通用

string test1 = "Tx:202554Bytes  341Pkts";
string[] temp = test1.Split(new string[] { "  " }, StringSplitOptions.RemoveEmptyEntries);
string bytes = temp[0].TrimStart("Tx:".ToCharArray()).TrimEnd("Bytes".ToCharArray());
string pkts = temp[1].Trim().TrimEnd("Pkts".ToCharArray());


正则方法也给出来吧
string test = "Tx:202554Bytes  341Pkts";
string bytes = string.Empty;
string pkts = string.Empty;
Match m = Regex.Match(test, @"Tx:(\d+)Bytes  (\d+)Pkts");
if (m.Success)
{
    bytes = m.Groups[1].Value;
    pkts = m.Groups[2].Value;
}

#15


1、你在文件里以行为单位放置。
2、读取的时候,以空格把字符串分解成字符串组。