Ejemplo n.º 1
0
        // --------------------------------------------------------------------
        // 楽曲情報・番組情報をインポート(1 ファイル分)
        // --------------------------------------------------------------------
        private void ImportInfo <T>(Dictionary <String, List <List <String> > > oCsvs, String oCsvFileName, String oExtractedFolderPath, Int32 oKeyColumnIndex,
                                    ref Int32 oTotalAddedRecords)
        {
            // 解凍された CSV ファイルがあるか確認
            String aExtractedCsvPath = oExtractedFolderPath + oCsvFileName;

            if (!File.Exists(aExtractedCsvPath))
            {
                return;
            }

            Int32         aNumAddedRecords = 0;
            List <String> aTitle           = NklCommon.CsvTitle <T>();

            // CSV 読み込み
            ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, oCsvFileName + " をインポートしています...");
            List <List <String> > aCsv = NklCommon.LoadCsv(aExtractedCsvPath, mNicoKaraListerSettings, aTitle.Count + 1);

            // インポート
            String aUserCsvPath = NklCommon.UserCsvPath(oCsvFileName);

            foreach (List <String> aRecord in aCsv)
            {
                // ユーザー CSV に既にキー列が存在している場合はインポートしない
                String        aFoundCsvPath;
                List <String> aFoundRecord = NklCommon.FindCsvRecord(oCsvs, oKeyColumnIndex, aRecord[oKeyColumnIndex], out aFoundCsvPath);
                if (aFoundRecord != null && !NklCommon.IsSystemCsvPath(aFoundCsvPath))
                {
                    continue;
                }

                // システム CSV に既に同じレコードが存在している場合はインポートしない
                if (NklCommon.RecordExists(oCsvs, aRecord, oKeyColumnIndex))
                {
                    continue;
                }

                // インポートする
                if (!oCsvs.ContainsKey(aUserCsvPath))
                {
                    oCsvs[aUserCsvPath] = new List <List <String> >();
                }
                oCsvs[aUserCsvPath].Add(aRecord);
                aNumAddedRecords++;
            }

            // 保存
            if (aNumAddedRecords > 0)
            {
                NklCommon.BackupCsv(aUserCsvPath);
                CsvManager.SaveCsv(aUserCsvPath, oCsvs[aUserCsvPath], "\r\n", Encoding.UTF8, aTitle, true);
            }

            // 報告
            ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "重複を除く " + aNumAddedRecords + " レコードをインポートしました。");
            oTotalAddedRecords += aNumAddedRecords;
        }