You didn't say Windows or Unix....
 
Here's Unix
#!/bin/sh
FILES="data1 data2 data3"
rm -f data.db
echo "create table t (file varchar,i1 int, i2 int, i3 int);" |sqlite3 data.db
for f in $FILES
do
        exec<$f
        while read line
        do
                v=`echo $line |awk '{ print $1 "," $2 "," $3 }'`;
                sql="insert into t values('$f',$v);";
                echo $sql|sqlite3 data.db;
        done
done

==> data1 <==
123 1000 199
124 1001 200
==> data2 <==
123 1100 188
124 1101 189
==> data3 <==
125 800 805
126 801 806
 
Result:
CREATE TABLE t (file varchar,i1 int, i2 int, i3 int);
INSERT INTO "t" VALUES('data1',123,1000,199);
INSERT INTO "t" VALUES('data1',124,1001,200);
INSERT INTO "t" VALUES('data2',123,1100,188);
INSERT INTO "t" VALUES('data2',124,1101,189);
INSERT INTO "t" VALUES('data3',125,800,805);
INSERT INTO "t" VALUES('data3',126,801,806);

If you need windows a small C program will generate the SQL for you which you 
can pipe into sqlite.
Just run this like this:
data data1 data2 data3 | sqlite3 data.db
 
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
        int i;
        FILE *fp;
        char buf[256],sql[256];
        printf("CREATE TABLE t (file varchar,i1 int, i2 int, i3 int);\n");
        for(i=1;i<argc;i++) {
                fp = fopen(argv[i],"r");
                if (fp == NULL) {
                        perror(argv[i]);
                        exit(1);
                }
                while(fgets(buf,sizeof(buf),fp)) {
                        int n,i1,i2,i3;
                        n=sscanf(buf,"%d %d %d",&i1,&i2,&i3);
                        if (n != 3) fprintf(stderr,"Error?? Not 3 items: 
'%s'\n",buf);
                        sprintf(sql,"INSERT INTO t 
VALUES('%s',%d,%d,%d);\n",argv[i],i1,i2,i3);
                        printf("%s",sql);
                }
                fclose(fp);
        }
        return 0;
}

 
Michael D. Black
Senior Scientist
Advanced Analytics Directorate
Northrop Grumman Information Systems
 

________________________________

From: sqlite-users-boun...@sqlite.org on behalf of Lorenzo Isella
Sent: Wed 8/25/2010 7:42 AM
To: sqlite-users@sqlite.org
Subject: EXTERNAL:[sqlite] Stitching together Text Files into a New Database



Dear All,
I am  quite new to databases in general and sqlite in particular.
I have a number of data files which are nothing else than text files with a 
pretty simple simple structure: there are only 3 columns of integer numbers, 
something along these lines

123   1000  199
123   1100  188
125   800   805

and so on.
The first column contains only non-decreasing times.
Each of these text files corresponds to a different data collection campaign 
(let us call them A,B,C etc...).
I would like (with a minimal effort) to merge them into an sqlite database 
where each column now has a name (time, ID tag A, ID tag B) and each record is 
also marked according to its original dataset (i.e. looking at any entry, I 
must be able to tell the the original data file it belongs to).
Any suggestion is really appreciated

Lorenzo

P.S.: of course in the future I may get some new datafiles to merge, hence it 
is important that new data can be added effortlessly.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to