From 98f937eeb51e4cf493a6e2fd49fa0369965562d9 Mon Sep 17 00:00:00 2001 From: brianb Date: Sun, 12 Mar 2000 18:21:17 +0000 Subject: [PATCH] Added data export routine. --- src/include/mdbtools.h | 6 +-- src/libmdb/data.c | 3 +- src/util/Makefile | 6 ++- src/util/mdb-export.c | 89 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 5 deletions(-) create mode 100644 src/util/mdb-export.c diff --git a/src/include/mdbtools.h b/src/include/mdbtools.h index 91e19cd..3e91f3e 100644 --- a/src/include/mdbtools.h +++ b/src/include/mdbtools.h @@ -127,9 +127,9 @@ extern MdbTableDef *mdb_read_table(MdbCatalogEntry *entry); /* data.c */ extern void mdb_data_dump(MdbTableDef *table); extern void mdb_bind_column(MdbTableDef *table, int col_num, void *bind_ptr); -extern int mdb_rewind_table(MdbTableDef *table) -extern int mdb_fetch_row(MdbTableDef *table) -extern int mdb_is_fixed_col(MdbColumn *col) +extern int mdb_rewind_table(MdbTableDef *table); +extern int mdb_fetch_row(MdbTableDef *table); +extern int mdb_is_fixed_col(MdbColumn *col); extern char *mdb_col_to_string(MdbHandle *mdb, int start, int datatype, int size); diff --git a/src/libmdb/data.c b/src/libmdb/data.c index 5c1285f..65c38c7 100644 --- a/src/libmdb/data.c +++ b/src/libmdb/data.c @@ -62,11 +62,12 @@ int delflag, lookupflag; if (row_start & 0x8000) delflag++; if (row_start & 0x4000) lookupflag++; row_start &= 0x0FFF; /* remove flags */ +#if DEBUG fprintf(stdout,"Pg %d Row %d bytes %d to %d %s %s\n", pg_num, row, row_start, row_end, lookupflag ? "[lookup]" : "", delflag ? "[delflag]" : ""); - +#endif if (delflag || lookupflag) { row_end = row_start-1; return 0; diff --git a/src/util/Makefile b/src/util/Makefile index de4de1c..efa3293 100644 --- a/src/util/Makefile +++ b/src/util/Makefile @@ -3,13 +3,14 @@ CC = gcc INC = -I ../include `glib-config --cflags` LIBS = -L ../libmdb -lmdb `glib-config --libs` -PROGS = prcat prkkd prtable prdata prdump schema +PROGS = prcat prkkd prtable prdata prdump schema mdb-export PRCATOBJS = prcat.o PRKKDOBJS = prkkd.o PRTABLEOBJS = prtable.o PRDATAOBJS = prdata.o PRDUMPOBJS = prdump.o SCHEMAOBJS = schema.o +EXPORTOBJS = mdb-export.o all: $(PROGS) @@ -31,6 +32,9 @@ prdump: $(PRDUMPOBJS) schema: $(SCHEMAOBJS) $(CC) -g -o $@ $(SCHEMAOBJS) $(LIBS) +mdb-export: $(EXPORTOBJS) + $(CC) -g -o $@ $(EXPORTOBJS) ../libmdb/*.o `glib-config --libs` + clean: rm -f core *.o $(PROGS) diff --git a/src/util/mdb-export.c b/src/util/mdb-export.c new file mode 100644 index 0000000..3b33ed1 --- /dev/null +++ b/src/util/mdb-export.c @@ -0,0 +1,89 @@ +/* MDB Tools - A library for reading MS Access database file + * Copyright (C) 2000 Brian Bruns + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "mdbtools.h" + +main(int argc, char **argv) +{ +int rows; +int i, j; +unsigned char buf[2048]; +MdbHandle *mdb; +MdbCatalogEntry entry; +MdbTableDef *table; +MdbColumn *col; +/* doesn't handle tables > 256 columns. Can that happen? */ +char *bound_values[256]; +char delimiter[] = ","; +char header_row = 1; +char quote_text = 1; + + if (argc<2) { + fprintf(stderr,"Usage: %s \n",argv[0]); + exit(1); + } + + mdb = mdb_open(argv[1]); + + mdb_read_catalog(mdb, MDB_TABLE); + + for (i=0;inum_catalog;i++) { + entry = g_array_index(mdb->catalog,MdbCatalogEntry,i); + if (!strcmp(entry.object_name,argv[2])) { + table = mdb_read_table(&entry); + mdb_read_columns(table); + mdb_rewind_table(table); + + for (j=0;jnum_cols;j++) { + bound_values[j] = (char *) malloc(256); + bound_values[j][0] = '\0'; + mdb_bind_column(table, j+1, bound_values[j]); + } + if (header_row) { + col=g_ptr_array_index(table->columns,0); + fprintf(stdout,"%s",col->name); + for (j=0;jnum_cols;j++) { + col=g_ptr_array_index(table->columns,j); + fprintf(stdout,"%s%s",delimiter,col->name); + } + fprintf(stdout,"\n"); + } + + while(mdb_fetch_row(table)) { + fprintf(stdout,"%s",bound_values[0]); + for (j=1;jnum_cols;j++) { + col=g_ptr_array_index(table->columns,j); + if (quote_text && col->col_type==MDB_TEXT) { + fprintf(stdout,"%s\"%s\"",delimiter,bound_values[j]); + } else { + fprintf(stdout,"%s%s",delimiter,bound_values[j]); + } + } + fprintf(stdout,"\n"); + } + for (j=0;jnum_cols;j++) { + free(bound_values[j]); + } + } + } + + mdb_free_handle(mdb); +} +