sql >> データベース >  >> RDS >> Sqlserver

CSVファイルのインポートエラー:列区切り文字を含む列値

    警告の言葉:私は通常のC#コーダーではありません。

    しかしとにかく、このコードは次のことを行います:

    C:\ Input.TXT

    というファイルを開きます

    各行を検索します。行に5つを超えるコンマがある場合、最後から3番目のフィールド(注)から余分なコンマがすべて削除されます

    結果をC:\Output.TXTに書き込みます-これは実際にインポートする必要があるものです

    行うことができる多くの改善があります:

    • 接続マネージャーからファイルパスを取得する
    • エラー処理
    • 経験豊富なC#プログラマーは、おそらくコードをhlafでこれを行うことができます

    パッケージには適切なフォルダへの書き込みアクセス権が必要になることに注意してください

    public void Main()
    {
        // Search the file and remove extra commas from the third last field
        // Extended from code at
        // http://stackoverflow.com/questions/1915632/open-a-file-and-replace-strings-in-c-sharp
        // Nick McDermaid        
    
        string sInputLine;
        string sOutputLine;
        string sDelimiter = ",";
        String[] sData;
        int iIndex;
    
        // open the file for read
        using (System.IO.FileStream inputStream = File.OpenRead("C:\\Input.txt"))
        {
            using (StreamReader inputReader = new StreamReader(inputStream))
            {
                // open the output file
                using (StreamWriter outputWriter = File.AppendText("C:\\Output.txt"))
                {
                    // Read each line
                    while (null != (sInputLine = inputReader.ReadLine()))
                    {
                        // Grab each field out
                        sData = sInputLine.Split(sDelimiter[0]);
                        if (sData.Length <= 6)
                        {
                            // 6 or less fields - just echo it out
                            sOutputLine = sInputLine;
                        }
                        else
                        {
                            // line has more than 6 pieces 
                            // We assume all of the extra commas are in the notes field                                
    
                            // Put the first three fields together
                            sOutputLine =
                                sData[0] + sDelimiter +
                                sData[1] + sDelimiter +
                                sData[2] + sDelimiter;
    
                            // Put the middle notes fields together, excluding the delimiter
                            for (iIndex=3; iIndex <= sData.Length - 3; iIndex++)
                            {
                                sOutputLine = sOutputLine + sData[iIndex] + " ";
                            }
    
                            // Tack on the last two fields
                            sOutputLine = sOutputLine +
                                sDelimiter + sData[sData.Length - 2] +
                                sDelimiter + sData[sData.Length - 1];
    
    
                        }
    
                        // We've evaulted the correct line now write it out
                        outputWriter.WriteLine(sOutputLine);
                    }
                }
            }
        }
    
    
        Dts.TaskResult = (int)Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success;
    }
    


    1. Oracle SQL領域のSQL文を無効にして、統計を収集するときに新しい計画が作成されるようにする方法

    2. PostgreSQLの2つのテーブルに基づいて2つのcount(*)クエリの結果の差を計算します

    3. T-SQLを使用してSQLServerデータベースの外部キーを返す11の方法

    4. DML (SQL スクリプト) で SQL Server 2008.2010 からデータをエクスポートする方法は?