【问题标题】:Incorrect formatted.csv file converted from an sqlite db file (Android)从 sqlite db 文件转换的 formatted.csv 文件不正确 (Android)
【发布时间】:2016-10-18 14:34:39
【问题描述】:

在我的 Android 应用程序中,我将 SQLite .db 文件转换为 .csv 文件并保存在外部存储中 - 这部分运行良好。

然而,尽管所有数据都存在,即 23 列,当我输入一组样本数据时,输出看起来像:

"column_1_heading","column_2_heading","column_1_data","column_2_data",

所有内容都在一行中并用引号括起来。

我所追求的是它在单独的行中,没有引号,例如:

column_1_heading,column_2_heading
column_1_data,column_2_data

它们不需要按列排列,只需按顺序排列在不同的行中即可。

我用来执行转换的代码强烈基于this answer,其代码转载如下:

        File dbFile=getDatabasePath("MyDBName.db");
        DBHelper dbhelper = new DBHelper(getApplicationContext());
        File exportDir = new File(Environment.getExternalStorageDirectory(), "");
        if (!exportDir.exists())
        {
            exportDir.mkdirs();
        }

        File file = new File(exportDir, "csvname.csv");
        try
        {
            file.createNewFile();
            CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
            SQLiteDatabase db = dbhelper.getReadableDatabase();
            Cursor curCSV = db.rawQuery("SELECT * FROM contacts",null);
            csvWrite.writeNext(curCSV.getColumnNames());
            while(curCSV.moveToNext())
            {
                //Which column you want to exprort
                String arrStr[] ={curCSV.getString(0),curCSV.getString(1), curCSV.getString(2)};
                csvWrite.writeNext(arrStr);
            }
            csvWrite.close();
            curCSV.close();
        }
        catch(Exception sqlEx)
        {
            Log.e("MainActivity", sqlEx.getMessage(), sqlEx);
        }

是否需要进行更改以使输出 .csv 文件与所需的输出相匹配?

【问题讨论】:

    标签: android sqlite csv


    【解决方案1】:

    该解决方案既好又快,只需对原始代码的一行进行非常小的更改。

    行:

    CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
    

    只需要改写为:

    CSVWriter csvWrite = new CSVWriter(new FileWriter(file), CSVWriter.NO_QUOTE_CHARACTER, "\r\n");
    

    因为它可以满足我的需要。

    一些研究的一些解释。根据CSVWriter documentation

    NO_QUOTE_CHARACTER 顾名思义,禁止所有引号。

    Constant Field Values 页面中,"\r\n""\n" 甚至DEFAULT_LINE_END 都可以用作默认行终止符。

    同时包含这两者的观察效果消除了所有引号并分隔了每一行。

    【讨论】:

      猜你喜欢
      • 2016-10-20
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      相关资源
      最近更新 更多