// -------------------------------------------------------------------- // 楽曲情報・番組情報をインポート(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; }