14#include "arcane/std/SimpleCsvReaderWriter.h"
16#include "arccore/base/Directory.h"
17#include "arcane/utils/Iostream.h"
33 std::ofstream ofile((dst.
file(file_name) +
"." +
fileType()).localstr());
51 if (!_openFile(stream, src, file_name +
"." +
fileType())) {
60 if (!std::getline(stream, line)) {
71 ligne.
split(tmp, m_separator);
73 if (tmp.
size() == 0) {
78 m_simple_table_internal->m_table_name = tmp[0];
84 if (!std::getline(stream, line)) {
91 m_simple_table_internal->m_values.resize(1, m_simple_table_internal->m_column_names.size());
98 m_simple_table_internal->m_values.resize(compt_line + 1);
103 ligne.
split(splitted_line, m_separator);
106 if (splitted_line.
size() == 0) {
112 if (splitted_line.
size() != m_simple_table_internal->m_column_names.size() + 1) {
118 m_simple_table_internal->m_row_names.add(splitted_line[0]);
121 for (
Integer i = 1; i < splitted_line.
size(); i++) {
122 std::string std_string = splitted_line[i].localstr();
123 std::size_t pos_comma = std_string.find(
',');
125 if (pos_comma != std::string::npos) {
126 std_string[pos_comma] =
'.';
129 m_simple_table_internal->
m_values[compt_line][i - 1] = std::stod(std_string);
133 }
while (std::getline(stream, line));
139 m_simple_table_internal->m_row_sizes.resize(m_simple_table_internal->m_row_names.size());
140 m_simple_table_internal->m_row_sizes.fill(m_simple_table_internal->m_values.dim2Size());
142 m_simple_table_internal->m_column_sizes.resize(m_simple_table_internal->m_column_names.size());
143 m_simple_table_internal->m_column_sizes.fill(m_simple_table_internal->m_values.dim1Size());
151 m_simple_table_internal->clear();
166 return m_precision_print;
173 m_precision_print = 1;
174 else if (
precision > (std::numeric_limits<Real>::max_digits10))
175 m_precision_print = (std::numeric_limits<Real>::max_digits10);
183 return m_is_fixed_print;
189 m_is_fixed_print = fixed;
195 return m_scientific_notation;
201 m_scientific_notation = use_scientific;
210 return m_simple_table_internal;
216 if (simple_table_internal.
isNull())
217 ARCANE_FATAL(
"La réference passée en paramètre est Null.");
218 m_simple_table_internal = simple_table_internal;
224bool SimpleCsvReaderWriter::
225_openFile(std::ifstream& stream,
Directory directory,
const String& file)
227 stream.open(directory.
file(file).
localstr(), std::ifstream::in);
228 return stream.good();
231void SimpleCsvReaderWriter::
232_closeFile(std::ifstream& stream)
237void SimpleCsvReaderWriter::
238_print(std::ostream& stream)
241 std::ios_base::fmtflags save_flags = stream.flags();
242 std::streamsize save_prec = stream.precision();
244 if (m_is_fixed_print) {
245 stream << std::setiosflags(std::ios::fixed);
247 if (m_scientific_notation) {
248 stream << std::scientific;
250 stream << std::setprecision(m_precision_print);
252 stream << m_simple_table_internal->m_table_name << m_separator;
254 for (
Integer j = 0; j < m_simple_table_internal->m_column_names.size(); j++) {
255 stream << m_simple_table_internal->m_column_names[j] << m_separator;
259 for (
Integer i = 0; i < m_simple_table_internal->m_values.dim1Size(); i++) {
260 stream << m_simple_table_internal->m_row_names[i] << m_separator;
261 ConstArrayView<Real> view = m_simple_table_internal->m_values[i];
262 for (
Integer j = 0; j < m_simple_table_internal->m_values.dim2Size(); j++) {
263 stream << view[j] << m_separator;
268 stream.flags(save_flags);
269 stream.precision(save_prec);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Integer size() const
Nombre d'éléments du vecteur.
Arcane::UniqueArray< Arcane::UniqueArray< DataType > > m_values
Conteneur des variables génériques.
ConstArrayView< T > subConstView(Int64 abegin, Int32 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
Classe gérant un répertoire.
String file(const String &file_name) const override
Retourne le chemin complet du fichier file_name dans le répertoire.
bool isNull() const
Indique si le compteur référence une instance non nulle.
Référence à une instance.
void setFixed(bool fixed) override
Méthode permettant de définir le flag 'std::fixed' ou non.
void setInternal(const Ref< SimpleTableInternal > &simple_table_internal) override
Méthode permettant de définir une référence vers un SimpleTableInternal.
bool isForcedToUseScientificNotation() override
Méthode permettant de savoir si le frag 'std::scientific' est actif ou non pour l'écriture des valeur...
void clearInternal() override
Méthode permettant d'effacer le contenu de l'objet SimpleTableInternal.
void setForcedToUseScientificNotation(bool use_scientific) override
Méthode permettant de définir le flag 'std::scientific' ou non.
bool readTable(const Directory &src, const String &file_name) override
Méthode permettant de lire un fichier contenant un tableau simple.
String fileType() override
Méthode permettant de récupérer le type de fichier qui sera écrit par l'implémentation....
void print() override
Méthode permettant d'écrire le tableau dans la sortie standard.
bool isFixed() override
Méthode permettant de savoir si le frag 'std::fixed' est actif ou non pour l'écriture des valeurs.
Ref< SimpleTableInternal > internal() override
Méthode permettant de récupérer une référence vers l'objet SimpleTableInternal utilisé.
bool writeTable(const Directory &dst, const String &file_name) override
Méthode permettant d'écrire un tableau simple dans un fichier.
void setPrecision(Integer precision) override
Méthode permettant de modifier la précision du print.
Integer precision() override
Méthode permettant de récupérer la précision actuellement utilisée pour l'écriture des valeurs.
Chaîne de caractères unicode.
const char * localstr() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
void split(StringContainer &str_array, char c) const
Découpe la chaîne suivant le caractère c.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Int32 Integer
Type représentant un entier.
UniqueArray< String > StringUniqueArray
Tableau dynamique à une dimension de chaînes de caractères.