You can use sscanf to determine data type...I've done it before using a method
that's not obvious...
You parse from most restrictive to least restrictive format like this...this
will accept any valid float format including scientific notation.
#include <stdio.h>
enum {UNKNOWN, FLOAT, INT, STRING};
int datatype(char *s)
{
long i;
double f;
char buf[4096];
int n;
n = sscanf(s,"%d%s",&i,buf);
if (n == 1) {
printf("INT\n");
return INT;
}
n = sscanf(s,"%lg%s",&f,buf);
if (n == 1) {
printf("FLOAT\n");
return FLOAT;
}
n = sscanf(s,"%s",buf);
if (n == 1) {
printf("STRING\n");
return STRING;
}
else {
printf("UNKNOWN\n");
return UNKNOWN; // should never get here
}
}
main()
{
char *line1="1234";
char *line2="1234.5";
char *line3="x1234.5";
datatype(line1);
datatype(line2);
datatype(line3);
}
~
Michael D. Black
Senior Scientist
Advanced Analytics Directorate
Advanced GEOINT Solutions Operating Unit
Northrop Grumman Information Systems
________________________________________
From: [email protected] [[email protected]] on
behalf of Adam DeVita [[email protected]]
Sent: Tuesday, August 07, 2012 10:26 AM
To: General Discussion of SQLite Database
Subject: EXT :[sqlite] C# Dynamic data type
Good day,
I've been reading a bit of conflicted stuff online in terms of data type.
The most basic question, in C#, is can you easily determine the data
type of the Nth entry in a column.
{Ex: Create table A( x TEXT, y )
... a few inserts, binding a float, then a string, then an int into y..
select x,y from A
check the type of y before retrieving a value from it.
}
The docs for SQLiteDataReader.GetFieldType() seems to read as if it
will return the column affinity.
regards,
Adam
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users