gctl/lib/io/text_io2.h
2024-11-21 12:43:10 +08:00

123 lines
3.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************************************
* ██████╗ ██████╗████████╗██╗
* ██╔════╝ ██╔════╝╚══██╔══╝██║
* ██║ ███╗██║ ██║ ██║
* ██║ ██║██║ ██║ ██║
* ╚██████╔╝╚██████╗ ██║ ███████╗
* ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝
* Geophysical Computational Tools & Library (GCTL)
*
* Copyright (c) 2023 Yi Zhang (yizhang-geo@zju.edu.cn)
*
* GCTL is distributed under a dual licensing scheme. You can redistribute
* it and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either version 2
* of the License, or (at your option) any later version. You should have
* received a copy of the GNU Lesser General Public License along with this
* program. If not, see <http://www.gnu.org/licenses/>.
*
* If the terms and conditions of the LGPL v.2. would prevent you from using
* the GCTL, please consider the option to obtain a commercial license for a
* fee. These licenses are offered by the GCTL's original author. As a rule,
* licenses are provided "as-is", unlimited in time for a one time fee. Please
* send corresponding requests to: yizhang-geo@zju.edu.cn. Please do not forget
* to include some description of your company and the realm of its activities.
* Also add information on how to contact you by electronic and paper mail.
******************************************************/
#ifndef _GCTL_TEXT_IO2_H
#define _GCTL_TEXT_IO2_H
#include "../core.h"
#include "../utility.h"
namespace gctl
{
struct cell_content
{
std::string str_;
template <typename T> T value()
{
T out;
str2type(str_, out);
return out;
}
template <typename T> void value(const T &in)
{
str_ = std::to_string(in);
return;
}
};
struct text_content
{
// 头信息行数
int head_num_;
// 注释行起始符 标记行起始符 分割符
char att_sym_, tag_sym_, deli_sym_;
// 头信息行 注释行 标记行
std::vector<std::string> heads_, annotates_, tags_;
// 内容行与表格
std::vector<std::string> lines_;
std::vector<std::vector<cell_content> > table_;
/**
* @brief Construct a new text content object
*
*/
text_content();
/**
* @brief Destroy the text content object
*
*/
~text_content();
/**
* @brief Construct a new text descriptor object and load text file
*
* @param filename 文件名
* @param file_exten 文件扩展名
* @param unpack 将文件行内容按分隔符拆散保存至table_
*/
text_content(std::string filename, std::string file_exten = ".txt", bool unpack = false);
/**
* @brief 设置文件对象
*
* @param att_sym 注释行起始符
* @param tag_sym 标记行起始符
* @param deli 分割符
* @param h_num 头信息行数
*/
void set(char deli_sym = ' ', int h_num = 0, char att_sym = '#', char tag_sym = '!');
/**
* @brief 清理字符串向量对象
*
*/
void clear();
/**
* @brief 读入文本文件
*
* @param filename 文件名
* @param file_exten 文件扩展名
* @param unpack 将文件行内容按分隔符拆散保存至table_
*/
void load_text(std::string filename, std::string file_exten = ".txt", bool unpack = false);
/**
* @brief 将内容写入文件文件
*
* @param filename 文件名
* @param file_exten 文件扩展名
* @param packed 为真使用lines_写入文件为假则使用tabl_写入文件
*/
void save_text(std::string filename, std::string file_exten = ".txt", bool packed = true);
};
}
#endif //_GCTL_TEXT_IO2_H