Есть ли способ написать столбец CSV мудро, используя "|" в качестве разделителя в Java - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть List<ArrayList<String>> объекты, и я хочу записать их в файл CSV столбец за столбцом в Java.

List<ArrayList<String>> contains 

[[fileName, abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
[cadName, abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
[number, abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
[folder_Id, 098123, 098124, 094123, 0981290, 09812354],
[Directory_Path, 098123, 098124, 094123, 0981290, 09812354],
[wC_State, Working, WIP, Released, Development, Working],
[legacy_Path, C:\WC, C:\WC, C:\WC, C:\WC, C:\WC],
[reverified, Empty, Empty, Empty, Yes, Empty],
[createdBy, 12132019, 12092019, 12072019, 12132018, 12132019],
[originDate, 12132019, 12092019, 12072019, 12132018, 12132019],
[iteration, 2, 8, 13, 19, 3],
[shouldImport, True, True, True, True, True],
[Mymap, True, True, True, True, True],
[YourMap, True, True, True, True, True]]

До сих пор я пробовал ниже код

String csv = "C:\\Users\\Output.csv";
        CSVWriter writer = null;
        try {
            writer = new CSVWriter(new FileWriter(csv),'|',CSVWriter.NO_QUOTE_CHARACTER,
                    CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                    CSVWriter.DEFAULT_LINE_END);
            for(ArrayList<String> each: databaseColListHeaderChange){
                writer.writeNext(each.toArray(new String[each.size()]));
            }
            writer.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Iполучаю строку данных мудрым в CSV-файл.Есть ли способ записать ArrayList внутри столбца списка в CSV-файл

Прямо сейчас я получаю CSV-файл в следующем формате

fileName|abc.sldprt|pqr.sldprt|jku.sldprt|cmx.sldprt|abc.sldprt
cadName|abc.sldprt|pqr.sldprt|jku.sldprt|cmx.sldprt|abc.sldprt
number|abc.sldprt|pqr.sldprt|jku.sldprt|cmx.sldprt|abc.sldprt
folder_Id|098123|098124|094123|0981290|09812354
Directory_Path|098123|098124|094123|0981290|09812354
wC_State|Working|WIP|Released|Development|Working
legacy_Path|C:\WC|C:\WC|C:\WC|C:\WC|C:\WC
reverified|Empty|Empty|Empty|Yes|Empty
createdBy|12132019|12092019|12072019|12132018|12132019
originDate|12132019|12092019|12072019|12132018|12132019
iteration|2|8|13|19|3
shouldImport|True|True|True|True|True
Mymap|True|True|True|True|True
YourMap|True|True|True|True|True

Мне нужны данные в следующем формате

fileName|cadName|number|folder_Id|Directory_Path
abc.sldprt|abc.sldprt|abc.sldprt|098123|098123
pqr.sldprt|pqr.sldprt|pqr.sldprt|098124|098124
jku.sldprt|jku.sldprt|jku.sldprt|094123|094123
cmx.sldprt|cmx.sldprt|cmx.sldprt|0981290|0981290
abc.sldprt|abc.sldprt|abc.sldprt|09812354|09812354
...so on all the list

пожалуйста, если есть предложения или помощь?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Вам просто нужно продумать шаги, которые вы предприняли бы, если бы вы записывали содержимое этого массива вручную.

Голые кости этого псевдокода со вкусом Java:

for(int column=0; column<numColumns; column++) {
   for(int row=0; row<numRows; row++) {
      output content[row][column];
      output "|" when necessary
   }
   output newline
}

Ключевое различие между этим и тем, что вы уже сделали, состоит в том, что вы переключаете порядок от content[column][row] до content[row][column].

Обратите внимание, что если это не академическое упражнение, вы должны использовать библиотеку, такую ​​как Commons CSV , для чтения / записи данных, подобных CSV, потому что могут быть тонкие проблемы, и они были решено.

0 голосов
/ 23 апреля 2019

Вам нужно нормализовать ваши данные в карте, где ключ будет вашей первой записью в массиве, а значение будет остальной частью списка.

{
 fileName=[abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
 cadName=[abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
...
}

, а затем используйте ключи карты в качестве заголовков

...