C#写线正确显示前导零另存为csv
在正确处理csv中的前导零时遇到问题,已尝试在字符串值之前添加C#写线正确显示前导零另存为csv,c#,csv,text,C#,Csv,Text,在正确处理csv中的前导零时遇到问题,已尝试在字符串值之前添加',但在csv文件中显示'StringValue 已经尝试过\t它可以工作,但当我尝试用记事本打开它时,它会显示一个选项卡 我还有别的办法解决这个问题吗?我的主要目的是,当它通过csv文件打开时,“不得显示,当我使用文本编辑器打开它时,它将不会显示 这是我当前的代码 foreach (var i in TransmittedDataBLL.Instance.GetDepEdTextFile(data)) {
'
,但在csv文件中显示'StringValue
已经尝试过\t
它可以工作,但当我尝试用记事本打开它时,它会显示一个选项卡
我还有别的办法解决这个问题吗?我的主要目的是,当它通过csv文件打开时,“
不得显示,当我使用文本编辑器打开它时,它将不会显示
这是我当前的代码
foreach (var i in TransmittedDataBLL.Instance.GetDepEdTextFile(data))
{
writer.WriteLine(
"'" + i.Region.ToString() + ",'" + i.Division.ToString() + ",'" + i.Station.ToString() + ",'" + i.EmployeeNumber.ToString()
+ "," + i.FirstName.ToString() + "," + i.MiddleInitial.ToString() + "," + i.LastName.ToString() + "," + i.Appelation.ToString()
+ ",'" + i.DednCode.ToString() + "," + i.DednSubCode.ToString() + ",'" + i.EffectDate.ToString() + ",'" + i.TermDate.ToString()
+ ",'" + i.AmountStr.ToString() + ",'" + i.LoanAmountStr.ToString() + ",'" + i.InterestAmountStr.ToString() + ",'" + i.OtherChargesStr.ToString()
+ "," + i.BillingType.ToString() + "," + i.UpdateCode.ToString()
);
}
更新代码:
writer.WriteLine("'{0}','{1}','{2}','{3}'", i.Region.ToString(), i.Division.ToString(), i.Station.ToString(), i.EmployeeNumber.ToString());
更新代码:相同问题,前导零未显示
writer.WriteLine("\"{0}\",\"{1}\",\"{2}\",\"{3}\"", i.Region.ToString(), i.Division.ToString(), i.Station.ToString(), i.EmployeeNumber.ToString());
这是我查询的数据
完整代码:
private void CreateTextFile(string regioncode, string branchcode)
{
string sFileName = Path.GetRandomFileName();
string fileName = DateTime.Now.ToString("mmddyyyy") + ".csv";
string Serverpath=ConfigurationManager.AppSettings["UploadPath"].ToString() + "\\DepEdReports\\";
TransmittedData data = new TransmittedData();
data.Region = regioncode.Trim();
data.BranchCode = branchcode.Trim();
if (!Directory.Exists(Serverpath))
Directory.CreateDirectory(Serverpath);
using (StreamWriter writer = new StreamWriter(Serverpath + sFileName + ".csv"))//Server.MapPath("TextFiles/" + sFileName + ".txt")))
{
foreach (var i in TransmittedDataBLL.Instance.GetDepEdTextFile(data))
{
//writer.WriteLine(
// i.Region + "," + i.Division + "," + i.Station + "," + i.EmployeeNumber
// + "," + i.FirstName + "," + i.MiddleInitial + "," + i.LastName + "," + i.Appelation
// + "," + i.DednCode + "," + i.DednSubCode + "," + i.EffectDate + "," + i.TermDate
// + "," + i.AmountStr + "," + i.LoanAmountStr + "," + i.InterestAmountStr + "," + i.OtherChargesStr
// + "," + i.BillingType + "," + i.UpdateCode
// );
//writer.WriteLine(string.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\"", i.Region, i.Division, i.Station, i.EmployeeNumber));
writer.WriteLine(GetCSV(i));
}
}
FileStream fs = null;
//fs = File.Open(Server.MapPath("TextFiles/" + sFileName + ".txt"), FileMode.Open);
fs = File.Open(Serverpath + sFileName + ".csv", FileMode.Open);
byte[] fbyte = new byte[fs.Length];
fs.Read(fbyte, 0, Convert.ToInt32(fs.Length));
fs.Close();
Response.AddHeader("Content-disposition", "attachment;filename=" + fileName);
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(fbyte);
Response.End();
}
private string GetCSV(TransmittedData i)
{
string[] list = new string[]
{
i.Region.ToString(),
i.Division.ToString(),
i.Station.ToString(),
i.EmployeeNumber.ToString(),
i.FirstName,
i.MiddleInitial,
i.LastName,
i.Appelation.ToString(),
i.DednCode.ToString(),
i.DednSubCode.ToString(),
i.EffectDate.ToString(),
i.TermDate.ToString(),
i.AmountStr,
i.LoanAmountStr,
i.InterestAmountStr,
i.OtherChargesStr,
i.BillingType.ToString(),
i.UpdateCode.ToString()
};
string csvLine = "\"" + string.Join(@"", "", list) + "\"";
return csvLine;
}
例如,您需要在每个字段的末尾添加另一个单引号
writer.WriteLine("=\"" + i.Region.ToString() + "\",=\"" + i.Division.ToString() + "\",=\""
您可以使用string.Format
并使用参数给出字段,例如
writer.WriteLine(string.Format("=\"{0}\",=\"{1}\"", i.Region,i.Division));
请注意,许多替代方案可用于将通用列表转换为CSV,而不是通过自己的代码
例如,您需要在每个字段的末尾添加另一个单引号
writer.WriteLine("=\"" + i.Region.ToString() + "\",=\"" + i.Division.ToString() + "\",=\""
您可以使用string.Format
并使用参数给出字段,例如
writer.WriteLine(string.Format("=\"{0}\",=\"{1}\"", i.Region,i.Division));
请注意,许多替代方案可用于将通用列表转换为CSV,而不是通过自己的代码
关于,您应该将所有值放在双引号内,或者根本不使用引号
foreach( var i in TransmittedDataBLL.Instance.GetDepEdTextFile( data ) )
{
writer.WriteLine( GetCSV( i ) );
}
}
protected string GetCSV( TransmittedData i )
{
string[] list = new string[]
{
i.Region.ToString(),
i.Division.ToString(),
i.Station.ToString(),
i.EmployeeNumber.ToString(),
i.FirstName,
i.MiddleInitial,
i.LastName,
i.Appelation.ToString(),
i.DednCode.ToString(),
i.DednSubCode.ToString(),
i.EffectDate.ToString(),
i.TermDate.ToString(),
i.AmountStr,
i.LoanAmountStr,
i.InterestAmountStr,
i.OtherChargesStr,
i.BillingType.ToString(),
i.UpdateCode.ToString()
};
string csvLine = "\"" + string.Join( "\",\"", list ) + "\"";
return csvLine;
}
如果所有值都是字符串(如上面所述),则可以省略.ToString()
,以提高可读性
如果要显示前导零,可以在相应的行上使用string.PadLeft()
:
i.Region.ToString().PadLeft( 8, '0' ) //make region to a total length of 8 and fills up with zeroes on the left side
如果您的一些值不是字符串而是整数,您可以简单地使用.ToString(“D8”)
关于您应该将所有值放在双引号内或根本不使用引号
foreach( var i in TransmittedDataBLL.Instance.GetDepEdTextFile( data ) )
{
writer.WriteLine( GetCSV( i ) );
}
}
protected string GetCSV( TransmittedData i )
{
string[] list = new string[]
{
i.Region.ToString(),
i.Division.ToString(),
i.Station.ToString(),
i.EmployeeNumber.ToString(),
i.FirstName,
i.MiddleInitial,
i.LastName,
i.Appelation.ToString(),
i.DednCode.ToString(),
i.DednSubCode.ToString(),
i.EffectDate.ToString(),
i.TermDate.ToString(),
i.AmountStr,
i.LoanAmountStr,
i.InterestAmountStr,
i.OtherChargesStr,
i.BillingType.ToString(),
i.UpdateCode.ToString()
};
string csvLine = "\"" + string.Join( "\",\"", list ) + "\"";
return csvLine;
}
如果所有值都是字符串(如上面所述),则可以省略.ToString()
,以提高可读性
如果要显示前导零,可以在相应的行上使用string.PadLeft()
:
i.Region.ToString().PadLeft( 8, '0' ) //make region to a total length of 8 and fills up with zeroes on the left side
如果您的某些值不是字符串而是整数,您可以简单地使用
.ToString(“D8”)
在解决问题之前放置一个制表符空间:
“\t”+字段
在解决问题之前放置一个制表符空间:
“\t”+field
您正在编写的值,是您试图编写的整数类型吗?@SimonPrice,不是。它们都是字符串只是出于好奇,为什么您的数字是字符串类型而不是int?@SimonPrice,因为报告表中给定的数字有前导零,这对我来说很有意义,那么您正在编写的值是您试图编写的整数类型吗?@SimonPrice,不是。它们都是字符串只是出于好奇,为什么您的数字是字符串类型而不是int?@SimonPrice,因为报告表中给定的数字有前导零,这对我来说很有意义,现在尝试了您的解决方案,但仍然给了我相同的问题检查链接感谢,但前导零没有显示,更新了我的代码。谢谢在您的输入字符串中是否有前导零?请在值之前使用=\“
,并在末尾仅添加\”
,检查我的更新code@Angelo11292最后!:)我很高兴它帮助了你。尝试了你的解决方案,但仍然给了我相同的问题检查链接感谢但前导零没有显示,更新了我的代码。谢谢在您的输入字符串中是否有前导零?请在值之前使用=\“
,并在末尾仅添加\”
,检查我的更新code@Angelo11292最后!:)我很高兴它对您有所帮助。尝试了您的解决方案,但给出了错误检查链接thanksgot错误8参数1:无法从“字符串”转换为“系统”。IFormatProvider'尝试了您的解决方案,但给出了错误检查链接thanksgot错误8参数1:无法从“字符串”转换为“系统。IFormatProvider”