static char* construct_filename(oskar_BeamPattern* h, int data_product_type, int stokes_in, int stokes_out, int i_station, int time_average, int channel_average, const char* ext) { int buflen, start = 0; char* name = 0; /* Construct the filename. */ buflen = (int) strlen(h->root_path) + 100; name = calloc(buflen, 1); start += SNPRINTF(name + start, buflen - start, "%s", h->root_path); if (i_station >= 0) start += SNPRINTF(name + start, buflen - start, "_S%04d", h->station_ids[i_station]); start += SNPRINTF(name + start, buflen - start, "_%s", time_average ? "TIME_AVG" : "TIME_SEP"); start += SNPRINTF(name + start, buflen - start, "_%s", channel_average ? "CHAN_AVG" : "CHAN_SEP"); start += SNPRINTF(name + start, buflen - start, "_%s", data_type_to_string(data_product_type)); if (stokes_in >= 0) start += SNPRINTF(name + start, buflen - start, "_%s", stokes_type_to_string(stokes_in)); if (stokes_out >= 0) start += SNPRINTF(name + start, buflen - start, "_%s", stokes_type_to_string(stokes_out)); start += SNPRINTF(name + start, buflen - start, ".%s", ext); return name; }
void SimpleTableDump::dumpHeader(std::string name, std::shared_ptr<AbstractTable> table) { std::stringstream header; std::vector<std::string> names, types; std::vector<uint32_t> parts; // Get names and types for(size_t i=0; i < table->columnCount(); ++i) { names.push_back(table->nameOfColumn(i)); types.push_back(data_type_to_string(table->typeOfColumn(i))); } // This calculation will break if the width of the value_id changes // or someone forgets to simply update the width accordingly in the // constructor of the table for(size_t i=0; i < table->partitionCount(); ++i) { parts.push_back(table->partitionWidth(i)); } // Dump and join header << std::accumulate(names.begin(), names.end(), std::string(), infix(" | ")) << "\n"; header << std::accumulate(types.begin(), types.end(), std::string(), infix(" | ")) << "\n"; std::vector<std::string> allParts; for(size_t i=0; i < parts.size(); ++i) { auto p = parts[i]; auto tmp = std::vector<std::string>(p, std::to_string(i) + "_R"); allParts.insert(allParts.end(), tmp.begin(), tmp.end()); } header << std::accumulate(allParts.begin(), allParts.end(), std::string(), infix(" | ")) << "\n"; header << "==="; std::string fullPath = _baseDirectory + "/" + name + "/header.dat"; std::ofstream data (fullPath, std::ios::out | std::ios::binary); data << header.str(); data.close(); }
int main (int argc, char **argv) { int last_argc = -1; gpgme_error_t err; int anyerr = 0; gpgme_data_t data; gpgme_data_type_t dt; if (argc) { argc--; argv++; } while (argc && last_argc != argc ) { last_argc = argc; if (!strcmp (*argv, "--")) { argc--; argv++; break; } else if (!strcmp (*argv, "--help")) show_usage (0); else if (!strcmp (*argv, "--verbose")) { verbose = 1; argc--; argv++; } else if (!strncmp (*argv, "--", 2)) show_usage (1); } init_gpgme (GPGME_PROTOCOL_OpenPGP); for (; argc; argc--, argv++) { if (verbose) printf ("reading file `%s'\n", *argv); err = gpgme_data_new_from_file (&data, *argv, 1); if (err) { fprintf (stderr, PGM ": error reading '%s': %s\n", *argv, gpg_strerror (err)); anyerr = 1; } else { dt = gpgme_data_identify (data, 0); if (dt == GPGME_DATA_TYPE_INVALID) anyerr = 1; printf ("%s: %s\n", *argv, data_type_to_string (dt)); gpgme_data_release (data); } } return anyerr; }
void AbstractTable::write(const std::string &filename) const { std::ofstream file(filename.c_str()); for (size_t column = 0; column < columnCount(); column++) { auto md = metadataAt(column); file << md->getName(); if (column < columnCount() - 1) { file << "|"; } } file << std::endl; for (size_t column = 0; column < columnCount(); column++) { auto md = metadataAt(column); file << data_type_to_string(md->getType()); if (column < columnCount() - 1) { file << "|"; } } file << std::endl; for (size_t column = 0; column < columnCount(); column++) { file << column << "_R"; if (column < columnCount() - 1) { file << "|"; } } file << std::endl; file << "===" << std::endl; for (size_t row = 0; row < size(); row++) { for (size_t column = 0; column < columnCount(); column++) { file << printValue(column, row); if (column < columnCount() - 1) { file << "|"; } } file << std::endl; } file.close(); }