日期:2014-05-19  浏览次数:20822 次

取定长字符串 问题,急!,急! 在线等。
各位大虾,我从一个文本文件中按为数读取,比如1~4位取出来作为一个字段,5~6位作为一个字段。其中虽然有逗号,但是不让用split方法分割。
例如:
1,2,0004,0000,天气         ,0004
1,2,0004,0000,地             ,0004
(注:定长格式,每行总位数固定,不过汉字的部分字数不固定后边添加有半角空格)

现在,对于文本一行中的数据,我用streamreader读取的,编码是unicode,
读取汉字那部分的时候,如果按位取,第一行取6位(后边4位是空格)没问题,但是第2行,就要取7位才可以,这样的话,取汉字后边的部分时开始位置就不正确了。
我想按字节读取(因为每行汉字部分的字节数都是一样的),但是不知道如何做,最好给出简要的解题过程吧,非常感谢。在线等!!


------解决方案--------------------
public static void Main()
{
using(StreamReader sr = new StreamReader( "TestFile.txt "))
using(StreamWriter sw = File.CreateText( "result.txt "))
{
Console.WriteLine(sw.Encoding);
String line;
while ((line = sr.ReadLine()) != null)
{
//看看这个line里有没有汉字,,然后在一点点读
Console.WriteLine(line);
sw.WriteLine(line);
sw.Flush();
}
Console.Read();
}
}
------解决方案--------------------
//取8字节就可以了
Encoding d = Encoding.Default;
byte[] bs = d.GetBytes(str);
strOut = d.GetString(bs, 0, 8);
------解决方案--------------------
如果你的文本是
1,2,0004,0000,天气 ,0004
1,2,0004,0000,地 ,0004

取第一行汉字
public string GetCh()
{
byte[] b = new byte[20];
filestream fs = new filestream( "文本名称.txt ",filemode.open);
fs.seek(14,orgin.begin)//定位到要搜索的汉字前
fs.read(b,0,4)// 取四位就是“天气两”个字放到二进制数组
string str;
str = Encoding.utf-8.getstring(b)//转换给string类型
}

别拿去就上机器运行啊 随便写的 大概是这个意思
------解决方案--------------------

string a= "1,2,0004,0000,天气 ,0004 ";
//a=sr.ReadLine();
//1
Regex reg=new Regex( "[^,]+(?=,) ");
ArrayList al=new ArrayList();
foreach(Match m in reg.Matches(a))
{
al.Add(m.Value.Trim());
}
//2
int ib=0,ie=0;
while((ie=a.IndexOf( ", ",ib))> =0)
{

al.Add(a.Substring(ib,ie-ib+1).Trim());
ib=ie+1;
}
------解决方案--------------------
全当BYTE读出来 然后截段转换也可以
------解决方案--------------------
先转成全角,就都是定长的了
把结果再转成半角

全角/半角的转换方法看我的blog: http://onekey.cnblogs.com