我在具有科学计数法的csv文件上有一个Font
字段。我需要阅读实际的文本并将其存储为字符串。
从其他文档中,我可以使用phoneNumber
将科学计数法转换为长型,但是我需要将此作为字符串类型。
例如:1.11E + 09应该是“ 1111111111”,而不是1111111111
答案 0 :(得分:1)
我相信您需要使用ConvertUsing
来获取此信息。
public class Program
{
static void Main(string[] args)
{
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
using (var reader = new StreamReader(stream))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
using(var csvWriter = new CsvWriter(Console.Out, CultureInfo.InvariantCulture))
{
writer.WriteLine("Id,PhoneNumber");
writer.WriteLine("1,1.11E+09");
writer.Flush();
stream.Position = 0;
csv.Configuration.RegisterClassMap<TestMap>();
var records = csv.GetRecords<Test>().ToList();
}
}
}
public class Test
{
public int Id { get; set; }
public string PhoneNumber { get; set; }
}
public sealed class TestMap : ClassMap<Test>
{
public TestMap()
{
AutoMap(CultureInfo.InvariantCulture);
Map(m => m.PhoneNumber).ConvertUsing(row => decimal.Parse(row.GetField<string>("PhoneNumber"), NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint).ToString());
}
}
答案 1 :(得分:1)
TL; DR:这看起来像Excel吞噬了您的电话号码数据。它消失了。转到源。
这本身不是编程的答案,而是更多地适合您所处的问题空间。从事电信计费工作后,此问题的唯一真正解决方案是找到数据源,并告知他们已损坏,请他们使用Excel从源无对其进行重建,或者至少确保将电话号码字段视为文本。
之所以这么说,是因为每次看到此错误都是因为处理链中某处的某人使用Excel向某些原始电信交换机数据添加或更新了一列信息。在联系人数据中,电话号码以多种格式输入时也会发生这种情况,其中一些原始号码没有其他格式(例如(cc)xxx..
或(npa)nxx-xxxx
)。 Excel对原始电话号码过敏,因为它可以从数字上看到它们。它将修剪前导零,并且如果太长,则会转换为科学计数法。
即使您成功地将其转换回一个整数,您也将丢失电话号码中许多对路由和评级至关重要的相关信息。请注意,1.11e+09
不会转换为1_111_111_111
,而是1_110_000_000
;无论哪种情况,在任何交易所中,这些都不是有效的电话号码。