在使用java将txt解析为csv时,长数字被转换为指数

csga3l58  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(532)

我有一个大的txt文件需要用java转换成csv格式,
我正在分析文件,但文件在一列中有一些长的nos,该列正在转换为指数。例如:891480000061119921953->8.9148e我需要将txt解析为csv,这样用excel打开的csv就不会转换为指数值
请查找以下代码:

public static String converter(String filename) throws Exception {
        FileWriter writer = null;
        if (filename.toString().endsWith("TXT")) {
            File file = new File("C:\\convertertool\\inputFiles\\" + filename + "");
            Scanner scan = new Scanner(file);
            filename = filename.replace("TXT", "CSV");
            File file2 = new File("C:\\convertertool\\ParsedFiles\\" + filename + "");
            file.createNewFile();
            writer = new FileWriter(file2);

            while (scan.hasNext()) {
                String csv = scan.nextLine().replace("|", ",");
                System.out.println(csv);
                writer.append(csv);
                writer.append("\n");
                writer.flush();
            }
        }
        return filename;

    }
jchrr9hc

jchrr9hc1#

Double.parseDouble("891413E")//or BigDecimal.parse...

我可以帮你

trnvg8h3

trnvg8h32#

假设如下:
(1) 您想打开csv文件(例如。 test.csv )在excel中,双击文件,使数据显示为数字序列(而不是使用科学符号)。
(2) 您不希望在excel文件打开后对其执行任何手动格式化(例如,您不希望更改excel单元格格式)。
(3) 您不想使用excel手动导入向导。
我知道的唯一方法是将excel公式写入csv文件,而不是写入实际的、纯数字值。可以使用任何excel公式将数字转换为字符串。
例如,如果数值为:

89148000006119921953

然后csv文件需要包含以下内容(我添加了 field one 就为了这个演示):

field one,"=TEXT(89148000006119921953,""#"")"

你可以将上面的内容粘贴到 test.csv 文件,并查看双击时会发生什么。
excel中的结果如下:

在这种情况下,excel公式(如果直接在excel中创建)如下所示:

=TEXT(1234567890123450000,"#")

所以在csv文件中,我们必须用双引号将字段括起来,并且我们必须通过将双引号加倍来转义公式中的双引号。
这样做有一些缺点:
(a) 文本文件不再包含纯的、未更改的数据。它包含一个excel公式。因此,在excel之外,它或多或少是无用的。
(b) excel中的值是文本公式而不是数字(因此不能对其执行算术运算)。
(c) excel列宽不会自动调整大小,因此如果单元格c1中有任何数据,则单元格b1的显示将被截断(但全文仍将存在)。
(d) 现在您几乎肯定需要一个合适的JavaCSV解析库来确保生成有效的csv数据。
最后一个想法:如果最终结果需要在excel中查看(并且只能在excel中查看),那么您可能应该生成一个实际的excel文件(例如,使用apachepoi),而不是生成csv文件。

相关问题