使用分隔符

时间:2013-06-13 19:44:14

标签: java html html5 csv

以下代码读取csv文件并定义从csv文件的行中获取的字段。问题是csv文件的firstname列的名称包含逗号“,”(例如Charles,Junior)。逗号和后面的名称是名字的一部分。我无法想出一种有效的方法来检查这些逗号,并将它们视为分界符,因为它们是名字本身的一部分。逗号的存在会创建一个不可取的新选项卡。我需要在不篡改csv文件的情况下执行此操作。有什么建议吗?

        //skip the first line since it is column names
        strLine = br.readLine();
        int tokenNumber= 0;

      //read comma separated file line by line
        while( (strLine = br.readLine()) != null)
        {
            //break comma separated line using ","
            st = new StringTokenizer(strLine, ",");
        while(st.hasMoreTokens())
            {
                switch (tokenNumber)
                {
                    case 1: firstName = st.nextToken(); break;
                    case 2: lastName = st.nextToken(); break;
                    default: st.nextToken(); break;
                }

                tokenNumber++;
            }

1 个答案:

答案 0 :(得分:0)

处理此类无效的CSV文件时,您的选项相当有限。

  1. 如果您知道文件中有多少列,并且其他列都没有这样的潜在逗号问题,您可以计算该行中的总列数,并重复将前两列组合在一起,直到您'降低到你期望的列数

  2. 如果第三列具有可预测值(例如,数字),并假设第二列永远不会出现逗号问题,则可以重复组合前两列,直到第三列包含与之匹配的值你期望的模式

  3. 如果您有第一个和/或最后一个名称列的允许值列表,则可以重复组合前两列,直到第一列和第二列中的值都具有有效值。

  4. 要问自己的关键问题是“你将如何手动处理这个过程?”。如果手动过程依赖于使用某些人为推理(例如识别通用名称),那么您将很难在代码中进行此操作。