0

現在、一時テーブルを使用して作成された CSV の SQL ヘッダーを入力するためのユーザー フレンドリーな入力を作成しようとしていますが、名前を検証して SQL フレンドリーな列ヘッダーに変更する際に問題が発生しています。

入力例は次のようになります。

名前、年齢、性別、出身地、Rac+e

入力は任意の単語である可能性があることに注意してください。これらは単なる例です。私の理想的な最終出力は、SQL 列ヘッダーです。

名前 年齢 性別 出身地 人種

ただし、無効な文字のチェックに問題があります(実際にはまだ行っていません)が、現在の主な問題は、スペースが必要な単語間のスペースと、単語の先頭にある他のスペースをチェックすることです。

私の現在の出力は次のようになります(無効な文字は後でテストするためのものであることに注意してください):

名前 Ag-e 性別 出身地 Rac+e

Birth Place は 1 つのスペースである必要がありますが、これを除いて、すべての間に 2 つのスペースがあることに注意してください。

これを達成するために現在使用している(または明確にわかるように達成していない)コードは次のとおりです。

            columnNamesList = new List<string>(columnNames.Split(splitChar));
        columnNamesList[0] = columnNamesList[0].Trim();
        columnNamesList[columnNamesList.Count - 1] = columnNamesList[columnNamesList.Count - 1].TrimEnd();
        List<string> removalList = new List<string>();

        foreach (string i in columnNamesList)
        {
            if (string.IsNullOrEmpty(i))
            {
                removalList.Add(i);
            }
        }

        if (removalList.Count < 0)
        {
            foreach (string i in removalList)
            {
                columnNamesList.Remove(i);
            }
        }


        for (int i = 0; i < columnNamesList.Count; i++)
        {
            string s = string.Empty;
            string str = columnNamesList[i];

            if (Regex.IsMatch(str, @"\w\s\w+", RegexOptions.IgnoreCase))
            {
                foreach (char c in str)
                {
                    if (Char.IsLetterOrDigit(c) || c == ' ' || c == ',')
                        s += c;
                    s = s.Replace(' ', '_');
                    columnNamesList[i] = s;
                }
            }
        }

        string[] columnArray = columnNamesList.ToArray<string>();
        columnNames = String.Join(" ", columnArray);
4

1 に答える 1

0

入力はコンマで区切られた最初の文字列のようなものだとおっしゃっていたと思います。これは機能しませんか?あなたがしなければならないのは、不要な文字を削除することです(ブラックリストに対して)

        var input = "Name, Ag-e, Gender, Birth Place, Rac+e";
        var splitInput = input.Split(',')
            .Select(i => 
                i.Trim()
                .ToLower()  
                .Replace(' ','_'));
        var output = string.Join(" ", splitInput.ToArray());
于 2013-05-29T14:35:31.900 に答える