1

次のコードは、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++;
            }
4

1 に答える 1

0

このような無効な CSV ファイルを処理する場合、オプションはかなり制限されます。

  1. ファイル内の列数が分かっていて、他の列にこのようなコンマの問題が発生する可能性がない場合は、行内の合計列を数え、その数になるまで最初の 2 列を繰り返し組み合わせることができます。あなたが期待する列の

  2. 3 番目の列に予測可能な値 (数値など) があり、2 番目の列にコンマの問題がないと仮定すると、期待するパターンに一致する値が 3 番目の列に含まれるまで、最初の 2 つの列を繰り返し組み合わせることができます。

  3. 姓名の列に使用できる値のリストがある場合は、最初の列と 2 番目の列の両方の値が有効な値になるまで、最初の 2 つの列を繰り返し組み合わせることができます。

自問すべき重要な質問は、「このプロセスを手動でどのように処理しますか?」です。手動のプロセスが、一般的な名前の認識などの人間の推論に依存している場合、コードでそれを行うのは困難です。

于 2013-06-13T20:05:16.233 に答える