Как удалить двойные кавычки из строки без смещения данных в следующий столбец - PullRequest
0 голосов
/ 29 ноября 2018

Input CSV Output_WithoutReplace function Output_WithReplace function

Мне предоставлен файл CSV, который содержит 3 столбца (Id,Имя, адрес) Каждое значение столбца заключено в двойные кавычки, поскольку данные содержат специальные символы, такие как запятая, которая также является разделителем полей (,) Поскольку данные заключены в двойные кавычки, все это рассматривается как строка.

Мое требование - я должен прочитать предоставленный Source файл CSV и создать новый файл CSV, в котором будет несколько пользовательских столбцов без значения, и что наиболее важно значения столбцов не должны быть заключены в двойные кавычки, а значения, содержащиеЗапятая не должна быть перенесена на следующий столбец.

До сих пор я пробовал код ниже.Добавлен новый пользовательский столбец, но двойные кавычки и разделитель не обрабатываются.Любая помощь о том, как это можно сделать.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;




public class Demo2 {



    public static void main(String[] args) throws IOException {
        File sourceCsvFile = null;
        File finalCsvFile = null;
        sourceCsvFile = new File("C:\\MyData\\Input.csv");
        finalCsvFile = new File("C:\\MyData\\Output.csv");
        String line = "";
        String cvsSplitBy = ",";



        BufferedWriter writer = new BufferedWriter(new FileWriter(finalCsvFile));


        try (BufferedReader br = new BufferedReader(new FileReader(sourceCsvFile))) // read the actual Source downloaded csv file which contains double quotes 
        {
            line = br.readLine();  // read only first line
            String newFileLine = "\"UniqueID\"" + cvsSplitBy + line + cvsSplitBy + "\"IsDelete\"" + cvsSplitBy + "\"Rootpid\"";
            writer.write(newFileLine);   // will be written as first line in new csv
            writer.newLine();  //  go to next line for writing next lines


            while ((line = br.readLine()) != null)  // this loop to write data for all lines except headers
            {

                newFileLine = "\"\"" + cvsSplitBy + line  + cvsSplitBy + "\"\"" + cvsSplitBy + "\"\"";
            //[enter image description here][1] newFileLine = newFileLine.replace("\"", "");  // when replace is used double quotes is gone, but then comma(,) within data is considered as new column and so data shifts to next column 
                writer.write(newFileLine);
                writer.newLine();

            }

        }

        writer.close();





    }
}
...