4#include "Stroika/Foundation/StroikaPreComp.h"
6#include "Stroika/Foundation/Characters/FloatConversion.h"
8#include "Stroika/Foundation/Characters/String2Int.h"
9#include "Stroika/Foundation/DataExchange/BadFormatException.h"
16using namespace Stroika::Foundation::DataExchange::Variant;
17using namespace Stroika::Foundation::DataExchange::Variant::CharacterDelimitedLines;
18using namespace Stroika::Foundation::Streams;
34class CharacterDelimitedLines::Reader::Rep_ :
public Variant::Reader::_IRep {
37 bool fTrimTokens_{
false};
39 : fDelimiters_{columnDelimiters}
40 , fTrimTokens_{trimTokens}
43 virtual _SharedPtrIRep Clone ()
const override
45 return make_shared<Rep_> (fDelimiters_, fTrimTokens_);
47 virtual optional<filesystem::path> GetDefaultFileSuffix ()
const override
65#if USE_NOISY_TRACE_IN_THIS_MODULE_
69 for (
const String& line : in.ReadLines ()) {
74#if USE_NOISY_TRACE_IN_THIS_MODULE_
75 DbgTrace (
"DataExchange::Variant::CharacterDelimitedLines::Reader::ReadMatrix: line={}, tokenCount={}"_f, line, tokens.size ());
76 for ([[maybe_unused]]
const auto& i : tokens) {
85CharacterDelimitedLines::Reader::Reader (
const Set<Character>& columnDelimiters,
bool trimTokens)
86 : inherited{make_shared<Rep_> (columnDelimiters, trimTokens)}
97 return Debug::UncheckedDynamicCast<const Rep_&> (_GetRep ()).ReadMatrix (in);
String is like std::u32string, except it is much easier to use, often much more space efficient,...
A generalization of a vector: a container whose elements are keyed by the natural numbers.
nonvirtual RESULT_CONTAINER Map(ELEMENT_MAPPER &&elementMapper) const
'override' Iterable<>::Map () function so RESULT_CONTAINER defaults to Sequence, and improve that cas...
nonvirtual void Append(ArgByValueType< value_type > item)
Set<T> is a container of T, where once an item is added, additionally adds () do nothing.
nonvirtual Iterable< Sequence< String > > ReadMatrix(const Streams::InputStream::Ptr< byte > &in) const
Simple variant-value (case variant union) object, with (variant) basic types analogous to a value in ...
Iterable<T> is a base class for containers which easily produce an Iterator<T> to traverse them.
Ptr New(const InputStream::Ptr< byte > &src, optional< AutomaticCodeCvtFlags > codeCvtFlags={}, optional< SeekableFlag > seekable={}, ReadAhead readAhead=eReadAheadAllowed)
Create an InputStream::Ptr<Character> from the arguments (usually binary source) - which can be used ...