// find the fields output for CSV void *determine_csv_fields(r_device* devices, int num_devices) { int i, j; int cur_output_fields = 0; int num_output_fields = 0; void *csv_aux; const char **output_fields = NULL; for (i = 0; i < num_devices; i++) if (!devices[i].disabled) { if (devices[i].fields) for (int c = 0; devices[i].fields[c]; ++c) ++num_output_fields; else fprintf(stderr, "rtl_433: warning: %d \"%s\" does not support CSV output\n", i, devices[i].name); } output_fields = calloc(num_output_fields + 1, sizeof(char*)); for (i = 0; i < num_devices; i++) { if (!devices[i].disabled && devices[i].fields) { for (int c = 0; devices[i].fields[c]; ++c) { output_fields[cur_output_fields] = devices[i].fields[c]; ++cur_output_fields; } } } csv_aux = data_csv_init(output_fields, num_output_fields); free(output_fields); return csv_aux; }
* GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include "data.h" int main() { data_t *data = data_make("label" , "", DATA_STRING, "1.2.3", "house_code" , "House Code", DATA_INT, 42, "temp" , "Temperature", DATA_DOUBLE, 99.9, "array" , "Array", DATA_ARRAY, data_array(2, DATA_STRING, (char*[2]){"hello", "world"}), "array2" , "Array 2", DATA_ARRAY, data_array(2, DATA_INT, (int[2]){4, 2}), "array3" , "Array 3", DATA_ARRAY, data_array(2, DATA_ARRAY, (data_array_t*[2]){ data_array(2, DATA_INT, (int[2]){4, 2}), data_array(2, DATA_INT, (int[2]){5, 5}) }), "data" , "Data", DATA_DATA, data_make("Hello", "hello", DATA_STRING, "world", NULL), NULL); const char *fields[] = { "label", "house_code", "temp", "array", "array2", "array3", "data", "house_code" }; data_print(data, stdout, &data_json_printer, NULL); fprintf(stdout, "\n"); data_print(data, stdout, &data_kv_printer, NULL); void *csv_aux = data_csv_init(fields, sizeof fields / sizeof *fields); data_print(data, stdout, &data_csv_printer, csv_aux); data_csv_free(csv_aux); data_free(data); }