从数据库取每个字段,然后生成一个文本,首先是记录总数,然后加记录信息,每条记录一行,每个字段的长度固定的,但是每个字段的类型是不一样的,存入的有数字,有字母,也有汉字,但是生产文本时每个字段的长度都要用空格补够你最大固定长度(最大固定长度为已知)
我的程序如下:但是有汉字那个字段怎么都不补够16位,数据库设置该字段为varchar(16),大家帮忙看下,怎么让汉字根据从数据库取出的汉字的多少,补够16位,一个汉字算是2位。            string ls;//记录总数
            string mycountstr = "select b_ID,c_ID,f_ID,b_where,b_number,b_time from table_data_up";
            SqlDataAdapter myAdapter = new SqlDataAdapter(mycountstr, mysqlcon);
            DataSet myDataset = new DataSet();
            myAdapter.Fill(myDataset, "table_data_up");
            DataTable myTable = myDataset.Tables["table_data_up"];
            int count = myTable.Rows.Count;//获得记录总数
            ls = count.ToString().PadLeft(4,'0');//记录总数补够4位
            string myCmdString = "select b_ID,c_ID,f_ID,b_where,b_number,b_time from table_data_up";
            SqlCommand cm = new SqlCommand(myCmdString, mysqlcon);
            SqlDataReader dr = cm.ExecuteReader();
            try
            {
                FileStream fs;
                if (System.IO.File.Exists("a.txt"))
                {
                    fs = new FileStream("a.txt", FileMode.Truncate);
                }
                else
                {
                    fs = new FileStream("a.txt", FileMode.Append);
                }
                StreamWriter sw = new StreamWriter(fs, Encoding.Default);
                sw.Write(ls);//先写入记录总数,然后在追加记录信息                while (dr.Read())
                {
                    //dr[3]这个列怎么办,因为里面有汉字和字母数字
                    ls = dr[0].ToString().PadRight(10, ' ') + "," + dr[1].ToString().PadRight(10, ' ') +","+dr[2].ToString().PadRight(10,' ')+ "," +dr[3].ToString().PadRight(16,' ') + "," + dr[4].ToString().PadRight(10, ' ') + "," + dr[5].ToString().PadRight(16, ' ') + "\r\n";                    sw.Write(ls);
                }
                sw.Close();
                fs.Close();
                MessageBox.Show("下载数据生成成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
                       dr.Close();

解决方案 »

  1.   

    类似于这样string test = "abc中文123";
    string result = test + new string(' ', 16 - Encoding.GetEncoding("gb2312").GetBytes(test).Length);需要做下长度判断
      

  2.   


                Console.WriteLine(string.Format("{0,25}", "HelloWorld"));
                Console.WriteLine(string.Format("{0,25}", "HelloWorld1"));
                Console.WriteLine(string.Format("{0,25}", "HelloWorld11"));
                Console.WriteLine(string.Format("{0,25}", "HelloWorld111"));Result:
                   HelloWorld
                  HelloWorld1
                 HelloWorld11
                HelloWorld111不知道是不是这种效果啊