Работа с запятыми в файле CSV - PullRequest
442 голосов
/ 20 апреля 2009

Я ищу предложения о том, как обрабатывать CSV-файл, который создается, затем загружается нашими клиентами и может иметь запятую в значении, таком как название компании.

Вот некоторые идеи, которые мы рассматриваем: цитируемые идентификаторы (значение, значения, и т. Д.) Или использование | вместо запятой. Самая большая проблема заключается в том, что нам нужно сделать это проще, иначе клиент этого не сделает.

Ответы [ 24 ]

0 голосов
/ 13 ноября 2018

Я использовал библиотеку Csvreader, но с ее помощью я получил данные, взорвав их через запятую (,) в значении столбца.

Итак, если вы хотите вставить данные файла CSV, которые содержат запятую (,) в большинстве значений столбцов, вы можете использовать функцию ниже. Ссылка на автора => https://gist.github.com/jaywilliams/385876

function csv_to_array($filename='', $delimiter=',')
{
    if(!file_exists($filename) || !is_readable($filename))
        return FALSE;

    $header = NULL;
    $data = array();
    if (($handle = fopen($filename, 'r')) !== FALSE)
    {
        while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
        {
            if(!$header)
                $header = $row;
            else
                $data[] = array_combine($header, $row);
        }
        fclose($handle);
    }
    return $data;
}
0 голосов
/ 21 ноября 2013

Вы можете прочитать файл CSV, как это.

это использует разбиения и заботится о пробелах.

ArrayList List = new ArrayList();
static ServerSocket Server;
static Socket socket;
static ArrayList<Object> list = new ArrayList<Object>();


public static void ReadFromXcel() throws FileNotFoundException
{   
    File f = new File("Book.csv");
    Scanner in = new Scanner(f);
    int count  =0;
    String[] date;
    String[] name;
    String[] Temp = new String[10];
    String[] Temp2 = new String[10];
    String[] numbers;
    ArrayList<String[]> List = new ArrayList<String[]>();
    HashMap m = new HashMap();

         in.nextLine();
         date = in.nextLine().split(",");
         name = in.nextLine().split(",");
         numbers = in.nextLine().split(",");
         while(in.hasNext())
         {
             String[] one = in.nextLine().split(",");
             List.add(one);
         }
         int xount = 0;
         //Making sure the lines don't start with a blank
         for(int y = 0; y<= date.length-1; y++)
         {
             if(!date[y].equals(""))
             {   
                 Temp[xount] = date[y];
                 Temp2[xount] = name[y];
                 xount++;
             }
         }

         date = Temp;
         name =Temp2;
         int counter = 0;
         while(counter < List.size())
         {
             String[] list = List.get(counter);
             String sNo = list[0];
             String Surname = list[1];
             String Name = list[2];
             for(int x = 3; x < list.length; x++)
             {           
                 m.put(numbers[x], list[x]);
             }
            Object newOne = new newOne(sNo, Name, Surname, m, false);
             StudentList.add(s);
             System.out.println(s.sNo);
             counter++;
         }
0 голосов
/ 24 апреля 2019

Я использовал библиотеку papaParse, чтобы проанализировать файл CSV и получить пары ключ-значение (ключ / заголовок / первая строка значения файла CSV).

Вот пример, который я использую:

https://codesandbox.io/embed/llqmrp96pm

там есть файл dummy.csv для демонстрации разбора CSV.

Я использовал его в ReactionJS, хотя его легко и просто воспроизвести в приложении, написанном на любом языке.

0 голосов
/ 24 января 2014

Я думаю, что самое простое решение этой проблемы - попросить клиента открыть csv в excel, а затем ctrl + r, чтобы заменить все запятые на любой идентификатор, который вы хотите. Это очень просто для клиента и требует только одного изменения в вашем коде, чтобы прочитать выбранный вами разделитель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...