/** Sets the file format for the file to import, which * may cause the file to be reloaded as well if the * previously set file format was different and a * filename was already set. * @param format the new format to set * @exception std::ifstream::failure if file reloading fails */ void GncTxImport::file_format(GncImpFileFormat format) { if (m_tokenizer && m_settings.m_file_format == format) return; auto new_encoding = std::string("UTF-8"); auto new_imp_file = std::string(); // Recover common settings from old tokenizer if (m_tokenizer) { new_encoding = m_tokenizer->encoding(); new_imp_file = m_tokenizer->current_file(); if (file_format() == GncImpFileFormat::FIXED_WIDTH) { auto fwtok = dynamic_cast<GncFwTokenizer*>(m_tokenizer.get()); if (!fwtok->get_columns().empty()) m_settings.m_column_widths = fwtok->get_columns(); } } m_settings.m_file_format = format; m_tokenizer = gnc_tokenizer_factory(m_settings.m_file_format); // Set up new tokenizer with common settings // recovered from old tokenizer m_tokenizer->encoding(new_encoding); load_file(new_imp_file); // Restore potentially previously set separators or column_widths if ((file_format() == GncImpFileFormat::CSV) && !m_settings.m_separators.empty()) separators (m_settings.m_separators); else if ((file_format() == GncImpFileFormat::FIXED_WIDTH) && !m_settings.m_column_widths.empty()) { auto fwtok = dynamic_cast<GncFwTokenizer*>(m_tokenizer.get()); fwtok->columns (m_settings.m_column_widths); } }
GncTokenizerTest() { fw_tok = gnc_tokenizer_factory(GncImpFileFormat::FIXED_WIDTH); csv_tok = gnc_tokenizer_factory(GncImpFileFormat::CSV); }