26 #include "../base/vector.h" 38 File(std::istream & input) : lines() {
Load(input); }
39 File(
const std::string & filename) : lines() {
Load(filename); }
48 auto begin()
const {
return std::begin(lines); }
51 auto end()
const {
return std::end(lines); }
54 auto begin() {
return std::begin(lines); }
57 auto end() {
return std::end(lines); }
66 std::string &
operator[](
size_t pos) {
return lines[pos]; }
69 const std::string &
operator[](
size_t pos)
const {
return lines[pos]; }
75 const std::string &
front()
const {
return lines.
front(); }
81 const std::string &
back()
const {
return lines.
back(); }
88 size_t start_size = lines.
size();
90 for (
size_t pos = 0; pos < in_lines.
size(); pos++) {
91 lines[start_size+pos] = in_lines[pos];
100 template <
typename T>
106 Append(std::forward<T>(in));
125 std::getline(input, lines.
back());
128 if (lines.
back().size() && lines.
back().back() ==
'\r') lines.
back().pop_back();
135 while (!input.eof()) {
144 std::ifstream file(filename);
145 if (file.is_open()) {
154 for (std::string & cur_line : lines) {
155 output << cur_line <<
'\n';
162 std::ofstream file(filename);
169 std::set<std::string>
AsSet()
const {
170 std::set<std::string> line_set;
171 for (
size_t i = 0; i < lines.
size(); i++) {
172 line_set.insert(lines[i]);
178 File &
Apply(
const std::function<
void(std::string &)> & fun) {
179 for (std::string & cur_line : lines) {
186 File &
KeepIf(
const std::function<
bool(
const std::string &)> & fun) {
188 for (std::string & cur_line : lines) {
191 std::swap(lines, new_lines);
197 return KeepIf( [](
const std::string & str){
return (
bool) str.size(); } );
212 if (!keep_newlines) {
213 std::string all_lines;
214 for (
const std::string & cur_line : lines){
215 all_lines += cur_line;
218 std::swap(lines[0], all_lines);
225 Apply( [marker](std::string & str) {
226 size_t pos = str.find(marker);
227 if (pos !=std::string::npos) str.resize( pos );
234 template <
typename T>
237 for (
size_t i = 0; i < lines.
size(); i++) {
238 results[i] = fun(lines[i]);
244 return Process<std::string>( [delim](std::string & line){
249 template <
typename T>
251 return Process<T>( [delim](std::string & line){
252 return emp::from_string<T>(
string_pop(line, delim));
File & Write(const std::string &filename)
Write this file to a file of the provided name.
Definition: File.h:161
File(const std::string &filename)
Definition: File.h:39
static void compress_whitespace(std::string &in_string)
Every time one or more whitespace characters appear replace them with a single space.
Definition: string_utils.h:369
File & Append(const File &in_file)
Join two files.
Definition: File.h:97
File & LoadLine(std::istream &input)
Load a line from an input stream into a file.
Definition: File.h:123
bool operator!=(const File in)
Test if two files are different.
Definition: File.h:120
auto begin() const
Return const iterator to beginning of file.
Definition: File.h:48
static void remove_whitespace(std::string &in_string)
Remove all whitespace from anywhere within a string.
Definition: string_utils.h:392
emp::vector< T > ExtractColAs(char delim=',')
Definition: File.h:250
File & Append(const emp::vector< std::string > &in_lines)
Append a vector of lines to the end of the file.
Definition: File.h:87
const std::string & front() const
Return a const reference to to the first line in the file.
Definition: File.h:75
A class to maintin files for loading, writing, storing, and easy access to components.
Definition: File.h:32
File(std::istream &input)
Definition: File.h:38
const std::string & back() const
Return a const reference to the last line in the file.
Definition: File.h:81
File & KeepIf(const std::function< bool(const std::string &)> &fun)
Purge functions that don't meet a certain criterion.
Definition: File.h:186
auto operator>>(std::string &out)
Extract first line from file.
Definition: File.h:111
File & Apply(const std::function< void(std::string &)> &fun)
Apply a string manipulation function to all lines in the file.
Definition: File.h:178
Simple functions to manipulate strings.
File & Append(const std::string &line)
Append a new line to the end of the file.
Definition: File.h:84
size_t size() const
Definition: vector.h:151
void emplace_back(ARGS &&...args)
Definition: vector.h:219
emp::vector< T > Process(const std::function< T(std::string &)> &fun)
Definition: File.h:235
File & Write(std::ostream &output)
Write this file to a provided output stream.
Definition: File.h:153
std::string & front()
Return the first line in the file.
Definition: File.h:72
File & Load(std::istream &input)
Load an entire input stream into a file.
Definition: File.h:134
std::string string_pop(std::string &in_string, const char delim=' ')
Definition: string_utils.h:303
size_t GetNumLines() const
How many lines are in this file?
Definition: File.h:60
File & operator=(const File &)=default
auto begin()
Return iterator to beginning of file.
Definition: File.h:54
File()
Definition: File.h:37
File & RemoveEmpty()
Remove all lines that are empty strings.
Definition: File.h:196
const std::string & operator[](size_t pos) const
Const index into a specific line in this file.
Definition: File.h:69
void resize(size_t new_size)
Definition: vector.h:161
auto operator<<(T &&in)
Definition: File.h:105
std::string & back()
Return the last line in the file.
Definition: File.h:78
auto end() const
Return const iterator to end of file.
Definition: File.h:51
File & RemoveComments(const std::string &marker)
A technique to remove all comments in a file.
Definition: File.h:224
size_t size() const
Compatibility with size()
Definition: File.h:63
emp::vector< std::string > ExtractCol(char delim=',')
Definition: File.h:243
auto end()
Return iterator to end of file.
Definition: File.h:57
If we are in emscripten, make sure to include the header.
Definition: array.h:37
File & Load(const std::string &filename)
Definition: File.h:143
std::string & operator[](size_t pos)
Index into a specific line in this file.
Definition: File.h:66
T & back()
Definition: vector.h:183
T & front()
Definition: vector.h:185
~File()
Definition: File.h:42
iterator erase(ARGS &&...args)
Definition: vector.h:207
std::set< std::string > AsSet() const
Convert this file into an std::set of lines (loses line ordering).
Definition: File.h:169
File & RemoveWhitespace(bool keep_newlines=true)
Delete all whitespace; by default keep newlines.
Definition: File.h:209
bool operator==(const File in)
Test if two files are identical.
Definition: File.h:117
File & operator+=(T &&in)
Append to the end of a file.
Definition: File.h:101
File & CompressWhitespace()
Definition: File.h:202
emp::vector< std::string > lines
Definition: File.h:34