我的txt文件存的是坐标,每个点有六个分量表示
共有一万多行
格式是
1 20.4 30.4 30.5 40 50 60
2 20.4 30.4 30.5 40 50 60
3 20.4 30.4 30.5 40 50 60

每行的数据都不一样,上面只是说明问题
现在我要读取这个txt,并且将没个分量乘以一个系数,系数会根据所取的数值有所不同上面数据间隔都是tab,怎么操作呢?

解决方案 »

  1.   

    是用流比较好,
    还是先把数据写到sql中再进行操作呢?
      

  2.   

    主要看你的计算方法是什么样的。
    如果各个行之间不是有很复杂的关系并且有较复杂的计算的话就没必要写到sql里再操作,用流一行一行地读挺好的。
      

  3.   

    以回车换行作为分隔符进行读取 插入一个数组数组中再分为N个小数组,每个小数组以TAB或是空格作为分隔符进行读取
      

  4.   

    如果只是把原始数据乘以个系数然后写入,不需要用数据库,用StreamReader.ReadLine 方法一行一行的读取,不保留在内存,读取后用String.Split分割tab,然后Convert.ToDouble取出各个数据后,乘以系数,用StreamWriter.WriteLine  写入另一个临时文件中,完成后,把原来的txt文件删掉,把写入的临时文件改名为原来的txt文件就可以了,
      

  5.   

    给你个写好方法:
      public static List<String[]> ReadTxt(string filePathName)
      {
      List<String[]> ls = new List<String[]>();
      StreamReader fileReader=new StreamReader(filePathName); 
      string strLine="";
      while (strLine != null)
      {
            strLine = fileReader.ReadLine();
           if (strLine != null && strLine.Length>0)
          {
                ls.Add(strLine.Split(','));
               //Debug.WriteLine(strLine);
           }
      }
      fileReader.Close();
      return ls;
      }
        
      

  6.   

    唉,LZ设计时就犯了一个错误,这种大容量的读取不应该用字符串的,而应该直接使用字节数组按照固定长度把数据写入文本,如果需要读取时只需要按照字节进行跳转读取就行了,例如6个坐标一组,每个坐标4字节那么当需要读取111个坐标时直接使用流定位跳转110*6*4就可以了,C#的流是经过优化的,读取速度会比一行行文本方式的字符串读取再解析快很多
      

  7.   

    原来是一“,”号分隔的,改改:  public static List<String[]> ReadTxt(string filePathName)
      {
      List<String[]> ls = new List<String[]>();
      StreamReader fileReader=new StreamReader(filePathName); 
      string strLine="";
      while (strLine != null)
      {
      strLine = fileReader.ReadLine();
      if (strLine != null && strLine.Length>0)
      {
      ls.Add(strLine.Split('\t'));
      //Debug.WriteLine(strLine);
      }
      }
      fileReader.Close();
      return ls;
      }
      

  8.   

    如果各个行之间不是有很复杂的关系并且有较复杂的计算的话就没必要写到sql里再操作,用流一行一行地读挺好的。