
	if(true)
	{
		struct DataSubType
		{
			int _min = INT_MAX;
			int _max = 0;
		};
		struct DataType
		{
			std::string _name;
			std::map<std::string, DataSubType> _allSub;
		};
		struct Data
		{
			std::map<int, DataType> _data;
		};
		Data data;
		std::string str = File::GetString("F:/All/收藏/音效光碟/C/list.txt");
		std::vector<std::string> vec_str;
		split(str, '\n', vec_str);
		for (size_t i = 0; i + 3 < vec_str.size(); i += 3)
		{
			int id = String::toInt(vec_str[i]);
			int type = String::toInt(vec_str[i + 1]);
			std::string name = vec_str[i + 2];
			std::string_view type_sub = String::GetBeginUntilNumber(name);
			//log_info("{}, {}, {}, {}", type, type_sub, name, id);

			DataType* group;
			if (type == -1)
			{
				group = &data._data[id];
				group->_name = name;
			}
			else
			{
				group = &data._data[type];

				DataSubType& sub = group->_allSub[std::string{ type_sub }];
				if (id < sub._min)
					sub._min = id;
				else if (id > sub._max)
					sub._max = id;
			}
				
		}
		// export
		std::string str_out;
		for (auto& iter : data._data)
		{
			for (auto& iter1 : iter.second._allSub)
			{
				str_out += fmt::format("{},{},{}-{}\n", 
					iter.second._name, iter1.first, iter1.second._min, iter1.second._max);
			}
		}

		File::SaveString(str_out, "D:/1.txt");
	}