mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-04-05 20:31:00 +08:00
Added data export routine.
This commit is contained in:
parent
3052707e31
commit
98f937eeb5
@ -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);
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
||||
|
89
src/util/mdb-export.c
Normal file
89
src/util/mdb-export.c
Normal file
@ -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 <file> <table>\n",argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
mdb = mdb_open(argv[1]);
|
||||
|
||||
mdb_read_catalog(mdb, MDB_TABLE);
|
||||
|
||||
for (i=0;i<mdb->num_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;j<table->num_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;j<table->num_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;j<table->num_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;j<table->num_cols;j++) {
|
||||
free(bound_values[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mdb_free_handle(mdb);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user