30void printValue(
const T &value) {
31 if constexpr (std::is_floating_point_v<T>)
32 std::cout << std::scientific << std::setprecision(15) << value;
38void printScalar(
const sdds::Scalar &value) {
39 std::visit([](
const auto &item) { printValue(item); }, value);
43void printValues(
const sdds::Values &values) {
44 std::visit([](
const auto &items) {
45 for (
const auto &item : items) {
54void printPage(
const sdds::Page &page) {
55 std::cout <<
"Page " << page.number() <<
" (" << page.rowCount() <<
" rows)\n";
57 for (
const auto &definition : page.layout().parameters) {
58 std::cout <<
" parameter " << definition.name <<
" ("
59 << sdds::typeName(definition.type) <<
") = ";
60 printScalar(page.parameter(definition.name));
64 for (
const auto &definition : page.layout().arrays) {
65 const auto &array = page.array(definition.name);
66 std::cout <<
" array " << definition.name <<
" ("
67 << sdds::typeName(definition.type) <<
") dimensions=";
68 for (std::size_t index = 0; index < array.dimensions.size(); ++index) {
71 std::cout << array.dimensions[index];
74 printValues(array.values);
77 for (
const auto &definition : page.layout().columns) {
78 std::cout <<
" column " << definition.name <<
" ("
79 << sdds::typeName(definition.type) <<
")\n";
80 printValues(page.column(definition.name));
92int main(
int argc,
char **argv) {
94 std::cerr <<
"usage: " << argv[0] <<
" input.sdds\n";
98 const std::filesystem::path input = argv[1];
100 auto reader = sdds::Reader::open(input);
101 const auto &layout = reader.layout();
102 std::cout <<
"SDDS version " << layout.version <<
", "
103 << (layout.data.mode == sdds::DataMode::Ascii ?
"ASCII" :
"binary")
105 while (
auto page = reader.next())
108 }
catch (
const std::exception &error) {
109 std::cerr <<
"Unable to read " << input <<
": " << error.what() <<
'\n';
int main(int argc, char **argv)
Reads and displays an SDDS file.