我想在程序中从不同的文本文件中读取double值。某些文件包含格式为“ xx.yyy”(点是分隔符)的双精度,而另一些文件则包含“ xx,yyy”(逗号是分隔符)。我使用c ++流进行读取。
如果您提前知道每个文件的格式,则可以使用自定义imbue()
来imbue()
一个std::ifstream
,其std::ifstream
构面指定所需的std::locale
和std::locale
字符。然后,std::numpunct
将能够按预期解析std::numpunct
值。
请参见thousands_sep
了解如何指定自定义decimal_point
。同样的方法也适用于operator>>
。
[如果您不提前知道格式,则必须先将operator>>
作为字符串读取,然后手动解析它们以确定所使用的格式,然后可以double
一个[C0然后根据需要将字符串转换为How can I set the decimal separator to be a comma?。如果给定文件中的所有decimal_point
都使用相同的格式,则可以对第一个thousands_sep
执行此操作,然后根据需要为随后的double
进行imbue()
然后对std::istringstream
执行此操作。