none
C#按指定的长度读取TXT文件 RRS feed

  • 问题

  • 有一个文本文件Test.txt, 然后根据一个数组 int[] strLeng=new int[6]{12,9,10,9,2,2}中的值读取Test.txt每行的内容;
    这样第一次读取12个字符,第二次读取9个字符,以此类推... 这是我最初的做法:
    现在想用一个枚举 :
    public enum StrEnumLength
      {
      TypeID =12,
      UserID = 9,
      UserPwd = 10,
      UserName = 9,
      UserCode= 2,
      UserNo = 2,  
      }

    foreach (int intValue in Enum.GetValues(StrEnumLength))
      {
      int intEnum = intValue;//intEnum的值第一次是2,第二次是2,第三次是9
      }
    然后遍历这个枚举 ,根据得到的值来读取Test.txt文件,可是这样第一次读取的是2个字符,第二次读取的是2个字符,第三次读取的是9个字符,这就不是我想要(我想要的是第一次读取12个字符,第二次读取9个字符,第三次读取的是10个字 符...... ).
    所以现在我想问一下是不是枚举实现不了,还是我写的不对.  
    是不是还有其它更好的方法来实现这种要 求.
    请教各位???
    2010年6月23日 6:42

答案

  • 把 enum 换成一个 List<int>,或者 Dictionary<string, int>,然后用 foreach 直接遍历 List 或者 Dictionary 就可以了。没有必要用枚举的。

    PS:枚举的实际类型可能是 uint 或者 int,编译时,它的值会从小到大排列,具备相同值得枚举项会被给出警告。


    Mark Zhou
    • 已标记为答案 Csharpzero 2010年6月25日 1:23
    2010年6月23日 8:50

全部回复

  • 这个返回的不一定是声明所使用的顺序啊,所以你太想当然了。看那个样子好像是反过来了吧,你可以试试看是不是真的反过来了,如果是,你就Enum.GetValues(typeof(StrEumLength)).Reverse()/*用linq*/。如果不是,那请你反射,如果你觉得用字符串查找太麻烦,你还是搞成

    const int TYPEID=12;

    ....

    然后用数组来搞定。

    2010年6月23日 7:22
  • 我试试看.
    2010年6月23日 7:52
  • 不是反过来,是从小到在排列.

    用反射怎么整???

    2010年6月23日 7:57
  • 把 enum 换成一个 List<int>,或者 Dictionary<string, int>,然后用 foreach 直接遍历 List 或者 Dictionary 就可以了。没有必要用枚举的。

    PS:枚举的实际类型可能是 uint 或者 int,编译时,它的值会从小到大排列,具备相同值得枚举项会被给出警告。


    Mark Zhou
    • 已标记为答案 Csharpzero 2010年6月25日 1:23
    2010年6月23日 8:50