- 主题:Re: [求助]大型struct填充
【 在 ylh1969 的大作中提到: 】
: 哦,不那么简单。
: 一个上百列的大表,增删改差,一大把的操作,每次按列点名,真够呛。
: 以插入来说,插入语句点一次名,values(点一遍占位符),绑定变量点一次名,填充数据点一次名。烦死。
: ...................
python脚本自动生成源代码。
这种东西没必要手写, 还容易错误。
数据库更加表的schema自动生成各种语句,这东西脚本很成熟, 当然现在语言模型帮你写也很方便。
--
FROM 124.126.0.*
【 在 poggy 的大作中提到: 】
:
: python脚本自动生成源代码。
: 这种东西没必要手写, 还容易错误。
: ...................
哦,这个源码可生成不起。
前边例子是吧问题简化了,经常的做法是,接收一堆数据,分解它,进行处理,最后加入数据库。在加入过程中发生重码还要处理,一遍一遍又一遍的对结构成员点名。也可能有若干种相似结构,相似的处理,点名的次数×N。
楼主说的只是这些情况中的一种。楼主的问题无法回避。要是有几十种数据结构,每个数据结构几十个成员,各有十几种点名方式,怎么办呢?
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
【 在 poggy 的大作中提到: 】
:
: python脚本自动生成源代码。
: 这种东西没必要手写, 还容易错误。
: ...................
正是在各种点名的困境中,才找到模板的方法,但是,一个大结构,为它写模板,的确是个繁杂而易错的工作。
20楼最后的那个模板,就是为了利用数据库的表结构(那东西可不是让你直接用的,他是深藏在工具库底层的),生成模板和相应的数据结构。一个150列的表,用不了1秒就生成了。
生成了两个文件:XXX.tpl,模板文件,被包含到一个.c或.cpp中。XXX.stu,数据结构,被包含到一个.h中。
使用的问题就简单了,相似结构的相似处理,一套程序解决,代入不同的结构和模板就行,
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
这种memset完全可以用定义时={0}代替吧
【 在 iwantfly 的大作中提到: 】
或者这样
xstruct a, b;
memset(&a, 0, sizeof(xstruct));
memset(&b, 0, sizeof(xstruct));
...
....
memcpy(&a,&b, sizeof(xstruct));
【 在 dajun 的大作中提到: 】
: 真正上古代码,一群真正智障在改.
: 比如:
: [code=c]
: ...................
--
修改:iwantfly FROM 221.219.211.*
FROM 114.246.108.*
有时不知道哪弄来的数据。
【 在 tom6bj 的大作中提到: 】
: 这种memset完全可以用定义时={0}代替吧
: 或者这样
: xstruct a, b;
: ...................
--
FROM 221.218.61.*
在本版搜一下:如何写一个函数能够序列化任意结构
发不了链接。
看57楼,那个结构够大不?
58楼是它的模板。可以看出二者的对应关系。模板的数据类型比struct丰富,严格的对应关系,手写是很容易错漏的。依据struct自动生成模板是不可行的。
这两个是用数据库自动生成的。同时生成这两个,然后include到程序里就可以使用了。在76楼有使用的例子。
生成模板比生成程序,更大的好处是,数据可以在运行时决定。76楼说的是,运行时给出一个表名,就可以进行序列化反序列化了(就是你说的填充)。进行增删改查等sql操作也不在话下。
【 在 dajun 的大作中提到: 】
: 真正上古代码,一群真正智障在改.
: 比如:
: [code=c]
: ...................
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
明白了。预处理展开一大堆语句。
解决我的部分问题,不能解决所有问题。
我的工具解决除序列号反序列化,还要解决关系数据库与结构体的映射问题。
数据库--结构--网络--客户端--结构。。。。。全过程的问题,一个模板解决。客户端与服务器可以是不同平台,结构可以有不同布局,两端有相同模板即可。
另外,我的是运行时的泛型,运行时提出一个结构,运行时处理。
类似的表进行相同的功能,一个程序即可,代入那哪个模板,就处理哪个表。
【 在 z16166 的大作中提到: 】
: 您老那个C里面的反序列化的轮子,现在C++里面是现成的,就是nlohmann json里的j.template get()那种
: 等C++的反射标准搞定,这种就更好搞了
的
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
SQL语句与struct没有本质不同。
语句的书写生成,绑定变量,获取结果集,一次又一次的对列名进行点名,非常烦。
用数据库表结构生成模板,用模板来解决这种繁琐操作。
如20楼,完全不需要点名啦!
【 在 poggy 的大作中提到: 】
: 结构体元素太多太复杂,,
: 这种直接内存数据库管理很方便了, 无服务进程数据库, 嵌入式的内存数据库, sqlite, Berkeley db都可以用。 尤其sqlite, 直接sql语句解千愁。
--
修改:ylh1969 FROM 221.221.55.*
FROM 221.221.55.*
enum{NAME=0,PASSWORD,……}
union D{
int iv
char【】 s
……
}d【】
for(i argc)
strcpy(d【i】.s,argv【i】)
【 在 dajun 的大作中提到: 】
: 真正上古代码,一群真正智障在改.
: 比如:
: [code=c]
: ...................
--
FROM 124.64.17.*