ARTS  2.3.1285(git:92a29ea9-dirty)
file.cc File Reference

This file contains basic functions to handle ASCII data files. More...

#include "arts.h"
#include <algorithm>
#include <cfloat>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <limits>
#include <stdexcept>
#include <dirent.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include "array.h"
#include "file.h"
#include "parameters.h"

Go to the source code of this file.

Functions

void filename_ascii (String &filename, const String &varname)
 Gives the default file name for the ASCII formats. More...
 
void open_output_file (ofstream &file, const String &name)
 Open a file for writing. More...
 
void cleanup_output_file (ofstream &, const String &)
 Closes the file. More...
 
void open_input_file (ifstream &file, const String &name)
 Open a file for reading. More...
 
void read_text_from_stream (ArrayOfString &text, istream &is)
 Read an ASCII stream and append the contents to the String array text. More...
 
void read_text_from_file (ArrayOfString &text, const String &name)
 Reads an ASCII file and appends the contents to the String vector text. More...
 
void replace_all (String &s, const String &what, const String &with)
 Replace all occurances of `what' in `s' with `with'. More...
 
int check_newline (const String &s)
 Checks if there is exactly one newline character at the end of the string. More...
 
bool file_exists (const String &filename)
 Checks if the given file exists. More...
 
String get_absolute_path (const String &filename)
 Convert relative path to absolute path. More...
 
bool find_file (ArrayOfString &matches, const String &filename, const ArrayOfString &paths, const ArrayOfString &extensions)
 Searches through paths for a file with a matching name. More...
 
void find_xml_file (String &filename, const Verbosity &verbosity)
 Find an xml file. More...
 
bool find_xml_file_existence (String &filename)
 As find_xml_file but does not throw in the main body. More...
 
String expand_path (const String &path)
 
String add_basedir (const String &path)
 
void get_dirname (String &dirname, const String &path)
 Return the parent directory of a path. More...
 
void list_directory (ArrayOfString &files, String dirname)
 Return list of files in directory. More...
 
void make_filename_unique (String &filename, const String &extension)
 Make filename unique. More...
 
const double_imanipoperator>> (std::istream &in, const double_imanip &dm)
 

Detailed Description

This file contains basic functions to handle ASCII data files.

Author
Patrick Eriksson
Date
2000-10-28

Definition in file file.cc.

Function Documentation

◆ add_basedir()

String add_basedir ( const String path)

Adds base directory to the given path if it is a relative path.

Parameters
[in]pathString with path
Returns
Expanded path.
Author
Oliver Lemke
Date
2012-05-01

Definition at line 499 of file file.cc.

References expand_path(), my_basic_string< charT >::nelem(), Parameters::outdir, and parameters.

Referenced by arts_exit(), arts_exit_with_error_message(), nca_write_to_file(), open_output_file(), and xml_write_to_file().

◆ check_newline()

int check_newline ( const String s)

Checks if there is exactly one newline character at the end of the string.

Parameters
sThe String to check.
Returns
Error code (0=ok, 1=empty, 2=missing, 3=extra newline
Author
Oliver Lemke

Definition at line 271 of file file.cc.

References replace_all().

Referenced by md_sanity_checks().

◆ cleanup_output_file()

void cleanup_output_file ( ofstream &  ,
const String  
)

Closes the file.

If it is empty, the file is deleted.

Parameters
fileFile pointer
Author
Oliver Lemke
Exceptions
ios_base::failureCould for example mean that the directory is read only.

Definition at line 136 of file file.cc.

Referenced by arts_exit().

◆ expand_path()

String expand_path ( const String path)

Expands the ~ to home directory location in given path.

Parameters
[in]pathString with path
Returns
Expanded path.
Author
Oliver Lemke
Date
2010-04-30

Definition at line 480 of file file.cc.

References my_basic_string< charT >::nelem().

Referenced by add_basedir(), find_file(), nca_read_from_file(), and open_input_file().

◆ file_exists()

bool file_exists ( const String filename)

Checks if the given file exists.

Parameters
filenameFile to check.
Returns
Error code (true = file exists, false = file doesn't exist)
Author
Oliver Lemke

Definition at line 303 of file file.cc.

Referenced by find_file(), make_filename_unique(), and ScatSpeciesScatAndMetaRead().

◆ filename_ascii()

void filename_ascii ( String filename,
const String varname 
)

Gives the default file name for the ASCII formats.

The default name is only used if the file name is empty.

Parameters
filenameOutput: file name
varnamevariable name
Author
Patrick Eriksson
Date
2000-11-01

Definition at line 73 of file file.cc.

References out_basename.

◆ find_file()

bool find_file ( ArrayOfString matches,
const String filename,
const ArrayOfString paths,
const ArrayOfString extensions 
)

Searches through paths for a file with a matching name.

If the filename starts with '/', the search path is ignored.

Parameters
[in,out]matchesMatching files are appended to this list.
[in]filenameFile to find.
[in]pathsList of paths to look in for the file.
[in]extensionsList of extensions to add to base filename.
Returns
Error code (true = file found, false = file not found)
Author
Oliver Lemke

Definition at line 353 of file file.cc.

References expand_path(), file_exists(), get_absolute_path(), my_basic_string< charT >::nelem(), and Array< base >::nelem().

Referenced by find_xml_file(), find_xml_file_existence(), open_input_file(), and ArtsParser::parse_agenda().

◆ find_xml_file()

void find_xml_file ( String filename,
const Verbosity verbosity 
)

Find an xml file.

If it doesn't exist in the current directory, also search the include and data path. Also tests if a compressed version exists.

The filename will be modified to contain the full path to the found match.

Parameters
[in,out]filenameFile to check.
[in]verbosityVerbosity
Exceptions
runtime_errorif file is not found.
Author
Oliver Lemke

Definition at line 414 of file file.cc.

References CREATE_OUT1, Parameters::datapath, find_file(), i, Parameters::includepath, Array< base >::nelem(), parameters, and _CS_basic_sstream_base< _CS_cT, _CS_Tr, _CS_Al >::str().

Referenced by abs_speciesDefineAllInScenario(), ScatSpeciesScatAndMetaRead(), xml_find_and_open_input_file(), and xml_read_from_file().

◆ find_xml_file_existence()

bool find_xml_file_existence ( String filename)

As find_xml_file but does not throw in the main body.

The filename will be modified to contain the full path to the found match if there is a match

Parameters
[in,out]filenameFile to check.
Returns
If file is found
Author
Oliver Lemke

Definition at line 452 of file file.cc.

References Parameters::datapath, find_file(), Parameters::includepath, Array< base >::nelem(), and parameters.

◆ get_absolute_path()

String get_absolute_path ( const String filename)

Convert relative path to absolute path.

Parameters
[in]filenameFilename to expand to absolute path.
Returns
Absolute path.
Author
Oliver Lemke

Definition at line 328 of file file.cc.

Referenced by find_file().

◆ get_dirname()

void get_dirname ( String dirname,
const String path 
)

Return the parent directory of a path.

Extracts the parent directory part of the given path.

Parameters
[out]dirnameParent directory of path
[in]pathPath
Author
Oliver Lemke

Definition at line 519 of file file.cc.

References i, my_basic_string< charT >::nelem(), Array< base >::nelem(), and my_basic_string< charT >::split().

Referenced by ArtsParser::parse_agenda().

◆ list_directory()

void list_directory ( ArrayOfString files,
String  dirname 
)

Return list of files in directory.

Returns list of all files in the given path.

Parameters
[out]filesList of files
[in]dirnameParent directory of path
Author
Oliver Lemke

Definition at line 543 of file file.cc.

References _CS_basic_sstream_base< _CS_cT, _CS_Tr, _CS_Al >::str().

Referenced by abs_cia_dataReadFromCIA().

◆ make_filename_unique()

void make_filename_unique ( String filename,
const String extension 
)

Make filename unique.

Checks if a file (or a gzipped version of it) with the given name already exists und appends a unique number to the filename if necessary

Parameters
[in,out]filenameFilename
[in]extensionOptional, number is inserted before the extension
Returns
Author
Oliver Lemke

Definition at line 571 of file file.cc.

References file_exists(), and _CS_basic_sstream_base< _CS_cT, _CS_Tr, _CS_Al >::str().

Referenced by xml_write_to_file().

◆ open_input_file()

void open_input_file ( ifstream &  file,
const String name 
)

Open a file for reading.

If the file cannot be opened, the exception IOError is thrown.

Parameters
fileFile pointer
nameName of the file to open
Author
Stefan Buehler
Version
1
Exceptions
ios_base::failureSomehow the file cannot be opened.

Definition at line 147 of file file.cc.

References Parameters::datapath, expand_path(), find_file(), Parameters::includepath, Array< base >::nelem(), parameters, and _CS_basic_sstream_base< _CS_cT, _CS_Tr, _CS_Al >::str().

Referenced by read_text_from_file(), CIARecord::ReadFromCIA(), ReadHITRAN(), ReadJPL(), ReadLBLRTM(), ReadMytran2(), telsem_atlasesReadAscii(), telsem_atlasReadAscii(), and TessemNNReadAscii().

◆ open_output_file()

void open_output_file ( ofstream &  file,
const String name 
)

Open a file for writing.

If the file cannot be opened, the exception IOError is thrown.

Parameters
fileFile pointer
nameName of the file to open
Author
Stefan Buehler
Version
1
Exceptions
ios_base::failureCould for example mean that the directory is read only.

Definition at line 93 of file file.cc.

References add_basedir().

Referenced by main().

◆ operator>>()

const double_imanip& operator>> ( std::istream &  in,
const double_imanip dm 
)

Definition at line 655 of file file.cc.

References double_istream::in, and double_imanip::in.

◆ read_text_from_file()

void read_text_from_file ( ArrayOfString text,
const String name 
)

Reads an ASCII file and appends the contents to the String vector text.

This uses the function

See also
read_text_from_stream. TEXT IS NOT OVERWRITTEN, BUT APPENDED!
Parameters
textOutput. The contents fo the file
nameName of file to read
Exceptions
IOError
Version
1
Author
Stefan Buehler

Definition at line 225 of file file.cc.

References open_input_file(), read_text_from_stream(), and _CS_basic_sstream_base< _CS_cT, _CS_Tr, _CS_Al >::str().

Referenced by SourceText::AppendFile().

◆ read_text_from_stream()

void read_text_from_stream ( ArrayOfString text,
istream &  is 
)

Read an ASCII stream and append the contents to the String array text.

TEXT IS NOT OVERWRITTEN, BUT APPENDED!

Parameters
textOutput. The contents fo the file
isStream from which to read
Exceptions
IOErrorSome error occured during the read
Version
1
Author
Stefan Buehler

Definition at line 190 of file file.cc.

References _CS_basic_sstream_base< _CS_cT, _CS_Tr, _CS_Al >::str().

Referenced by read_text_from_file().

◆ replace_all()

void replace_all ( String s,
const String what,
const String with 
)

Replace all occurances of `what' in `s' with `with'.

Parameters
sOutput. The String to act on.
whatThe String to replace.
withThe replacement.
Author
Stefan Buehler

Definition at line 253 of file file.cc.

References my_basic_string< charT >::npos.

Referenced by check_newline().