一个定义结构体数组里面是几个二维数组,我想将它保存到文件里,怎么做

&& 查看话题
请问VB如何实现顺序读取文本文件中的数据,并将读取到的数据保存在二维数组呢
现在有一组文本文件保存的数据(一个是8行3列),我想实现由VB顺序读取其中的每一个数据,然后保存到二维数组中,再由二维数组将数据添加到MSHFlexGrid控件的表格里,下面是我编的程序,但是最后只能读出第一行,恳请大家看看到底是哪出错了(最后希望读出的也是8行3列才对),谢谢大家!
程序如下:
Option Base 1
Private Sub Command1_Click()
Dim i As Long, j As Long, a() As Double
& &Open &C:\Users\lenovo\Desktop\测试数据.txt& For Input As #1
& && &&&ReDim Preserve a(1 To 8, 1 To 3)
& && &&&For i = 1 To 8
& && && && &For j = 1 To 3
& && && && && &Input #1, a(i, j)
& && && & Next j
& && &&&Next i
& &&&Close #1
& &For i = 1 To 8
& && &For j = 1 To 3
& && &&&MSHFlexGrid1.TextMatrix(i - 1, j - 1) = a(i, j)
& && &Next j
我非常好奇,楼主的程序居然能读进去成为数组。我以前觉得读进去的文本文字内容没有分段,怎么能成为数组,我就试了一下。我先验证了一下是否真的生产了完整的数组,实现了转换。
加了textbox用了这个语句
& & Text1.Text = &&
& & For i = 1 To 8
& && &&&For j = 1 To 3
& && && && &Text1.Text = Text1.Text & Chr(9) & a(i, j)
& && &&&Next j
& && &&&Text1.Text = Text1.Text & Chr(13) & Chr(10)
& & Next i
检验了一下,能出结果,说明楼主的文本到数组的转换是没有问题的。
我也不能在MSHFlexGrid1 中显示。我看了楼主的截图以后知道了问题所在。
需要用这个,就可以了。
Private Sub Form_Load()
& & MSHFlexGrid1.Rows = 10& &' 指定表格的总行数
& & MSHFlexGrid1.Cols = 4&&'指定表格的总列数
=====================
vb的人气太那个那个了,所以来凑个热闹。 Text1.Text 的属性不要忘记手动 预设 Text1.MultiLine的属性为 True。 : Originally posted by deephill at
我非常好奇,楼主的程序居然能读进去成为数组。我以前觉得读进去的文本文字内容没有分段,怎么能成为数组,我就试了一下。我先验证了一下是否真的生产了完整的数组,实现了转换。
加了textbox用了这个语句
& & Te ... 这个问题前几天已经解决,当时的错误显示基本上一直都是“下标越界”,后来我也是把控件的行列数改变之后就好了。VB相对于其他的语言好理解些,但是功能好像不太强大,用的人似乎也越来越少了,因此每每遇到问题都不方便求助,谢谢你的帮忙了 确实vb的人越来越少,不过现在vb出新版本了,不过我没有跟上。
个人觉得vb很适合我们这些用vb解决一些小问题的非计算机专业的人员。
希望以后多交流! : Originally posted by deephill at
确实vb的人越来越少,不过现在vb出新版本了,不过我没有跟上。
个人觉得vb很适合我们这些用vb解决一些小问题的非计算机专业的人员。
希望以后多交流! :hand:JM8.6中重要结构体说明 - Fangzhen - 博客园
随笔 - 367, 文章 - 174, 评论 - 82, 引用 - 0
JM8.6中重要结构体说明
&[global.h文件]
下面是一些枚举类型的定义
数据分区方式:PAR_DP_TYPE[PAR_DP_1(不使用数据分区), PAR_DP_3(使用ABC3数据分区)]
输出文件的类型:PAR_OF_TYPE[PAR_OF_ANNEXB, PAR_OF_RTP]
编码的方式: CodingType [FRAME_CODING, FIELD_CODING, ADAPTIVE_CODING]
句法元素的类型: SE_type[SE_HEADER,
SE_MBTYPE,
SE_REFFRAME,
SE_INTRAPREDMODE, SE_MVD ….]
比特位类型: BitCountType[BITS_HEADER,
BITS_TOTAL_MB,
BITS_MB_MODE,&&&&&&&&//++ 宏块类型、宏块模式编码比特数(writeMBHeader函数)
BITS_INTER_MB,&&&&//++ 帧间宏块的参考帧、运动向量编码比特数(writeMotionInfo2NAL函数)
BITS_CBP_MB,&&&&&&&&//++ 宏块 CBP编码比特数(writeCBPandLumaCoeff函数)
BITS_COEFF_Y_MB,&&&&//++ 宏块亮度残差编码比特数(writeCBPandLumaCoeff函数)
BITS_COEFF_UV_MB,&&&&//++ 宏块色度残差编码比特数(writeChromaCoeff函数)
BITS_DELTA_QUANT_MB,&&&&//++ 宏块量化参数增量编码比特数(writeCBPandLumaCoeff函数)
MAX_BITCOUNTER_MB
图像结构类型: PictureStructure[FRAME,
TOP_FIELD,
BOTTOM_FIELD]
片结构类型: SliceType[ P_SLICE = 0,
SI_SLICE];
&定义这些枚举类型, 主要是为了使代码更加清晰易读, 便于识别一些变量的含义
一些重要的结构体的定义
CABAC所要使用的结构体: EncodingEnvironment和BiContextType[state,MPS,count]
MotionInfoContexts和TextureInfoContexts
PixelPos在代码中使用的很多, 主要是保存像素相关的一些信息,
句法元素: SyntaxElement, 包含一些基本的类型和两个函数指针(*mapping)和(*writing)
宏块结构体:Macroblock, 一些和宏块相关的信息, 宏块指针struct
macroblock
*mb_available_up和*mb_available_left
mvd[2][BLOCK_MULTIPLE][BLOCK_MULTIPLE][2];
//!& indices correspond to [forw,backw][block_y][block_x][x,y]
Bitstream结构体:保存了一些与正在写的比特流相关的信息
byte_pos; //!& current p
bits_to_go;
//!& current bitcounter]
数据分区结构体: DataPartition, 其中包括Bitstream
*bitstream;
片结构体:Slice,其中包括了DataPartition
图像结构体:Picture,其中包括了slice数组Slice *slices[MAXSLICEPERPICTURE];
同时定义了三个Picture指针
对这三个指针变量, 我们可以追踪一下他们的使用情况:
其实, 我们可以发现, frame_pic和top_pic(bottom_pic)出现的位置很相似, 一个是针对帧图像,另外两个是针对场图像的, 所以我们可也只对frame_pic进行追踪即可.
frame_pic出现的过程如下:
首先在global.h文件中定义了指针变量frame_pic, 然后再lencode.c函数中对frame_pic进行了内存分配, 即frame_pic=malloc_picture(),但是我们可以看看函数malloc_picutre(),发现在这个函数中只是分配了sizeof(Picture)大小的内存, 并不含有任何数据信息.
接下来在函数encode_one_frame()函数中调用了函数frame_picture(frame_pic),此时的frame_pic是空的, 所以猜想在函数frame_picture中会对frame_pic进行填充.
在函数frame_picture中frame_pic变为frame, 所以对frame追踪:
可以发现,未对frame做任何变化就将其传入了函数code_a_picture,接着进入该函数:
在函数code_a_picture中frame变为pic, 接下来,将pic赋给了img-&currentPicture,这样这两个指针指向了同一个内存区域,可以同时对内存区域进行修改了.
对pic的几个成员进行了初始化之后就将pic传入了函数encode_one_slice&(SliceGroup,&pic);
由于pic中此时不含有输入序列的信息, 所以可以猜想在img变量中应该包含了输入文件的信息
我们进入encode_one_slice函数:可以发现该函数中没有对pic的修改, 所以pic根本没有必要作为一个参数传进来.
但是,通过对img-&currentPicture进行追踪可以发现,在函数encode_one_slice中调用了一个函数init_slice, 而在这个函数中有,然后对currPic中的slice数组进行了分配空间, 其实看init_slice之后可以发现这儿确实是对currentPicture所指向的slice数组进行了初始化.[需要追踪一下img变量的变化情况]
通过这个追踪过程, 我们可以发现img的成员变量currentPicture其实是用来指向当前正在活动的图像(frame_pic, top_pic或bottom_pic)
&结构体sourceframe:主要用来保存从.yuv文件中读取出来的原始的yuv三个分量数据,分别保存在(char *yf, *uf, *vf; 中)帧和场的情况不一样
Sourceframe定义了一个指针,利用函数AllocSourceframe为srcframe分配了内存空间, 利用函数ReadoneFrame将yuv文件中的数据读入到srcframe中去,然后利用将srcframe中的数据保存到了二维数组byte**imgY_org_frm, imgUV_org_frm, imgUV_org_frm
对几个比较相似的byte**多维数组进行分析
下面是几个看起来比较类似的数组, 现在我们要搞清它们之间的联系与区别.
观察来看, 其实主要分为三类:
这些数组中是对应的存储的原始图像的亮度,色度, 数组所存储的数据是从srcframe变量传递过来的.这些数组区别在于帧还是场.
由于色度与亮度是类似的,我们只分析亮度.img_org与imgY_org_frm是类似的, 也是存储的原始图像的亮度.通过查找img_org所在的位置, 我们可以从下面的截图可以发现,
在函数中有imgY_org=imgy_org_frm和imgY_org=imgy_org_top及imgY_org=imgy_org_bot的语句.
这相当于将imgY_org指针指向了imgy_org_frm或imgY_org_top等.
这样我们就可以理解了,其实imgY_org是一个用来指示当前正在处理的图像的原始亮度值,根据帧编码还是场编码的不同,可以指向imgy_org_frm(帧)或imgY_org_top(场).
看代码到现在,其实总结起来可以发现有很多这样的情况:相当于有三个比较类似的量,两个分别指向帧和场,而还有一个变量作为比较灵活的中间量,根据当前的选择,指向另外两个中的一个.从这儿开始总结一下这样的三元量(暂时这样称呼它们吧).
这两个和上面的区别比较大,这些是重建后的亮度和色度值,
在结构体enc_top_picture(StorablePicture)中的byte **
imgY;和byte ***
imgUV;存储的是重建后的亮度和色度值,在函数combine_field中将imgY和imgUV中的值分别复制到了imgY_com和imgUV_com中
&结构体Decoders, 对应的全局变量指针decs
结构体SNRParameters, 对应的全局变量指针snr
结构体InputParameters,对应全局变量指针input, 个人觉得这个不是很重要,因为它主要获得配置文件中的一些参数设置
结构体ImageParameters,这是一个很重要的结构体, 它的全局变量指针img,这个非常重要,要好好分析一下:
先看看这个结构体中比较重要的成员变量吧:(1) int m7[16][16];这个变量的命名很有意思,我觉得,因为它是m1,m2或m3,m4,而是m7,为什么是m7呢??
我们先看看这些m数组都在哪儿出现过吧?!
这些数组都与DCT变换有关
M1[16][16]一个宏块(16x16)的残差值
M0[4][4][4][4]也是一个宏块(16x16)的残差值,相比M1只是分成了16个4x4小块
在函数dct_luma_16x16中有:
在函数find_sad_16x16中有
在函数dct_luma中有:
在函数dct_chroma中有:
可以发现,在函数中出现了M1,M0,M3,M4,M5,M6, 所以为了程序的可读性比较强出现了m7,并且我们可以看到有很多
地方是m7与m5或m6之间的计算.
其实m5或m6应该是进行DCT变换时的中间变量,m7应该与M1类似,是存储的是宏块残差值
int ****cofAC; //!& AC coefficients [8x8block][4x4block][level/run][scan_pos]
int ***cofDC;
//!& DC coefficients [yuv][level/run][scan_pos]
这两个数组的含义很明显, 就是用来存储AC系数和DC系数,
但是还是有些东西值得我们去查找探寻的:
首先在rdopt.c文件中有两个全局变量:
这个可以与[H.264知识点释疑]中对cofAC等变量的分析结合起来看
其实这也牵扯到了函数store_macroblock_parameters和函数set_stored_macroblock_parameters的作用了,这个在之后再讨论
(3)介绍一下下面的几个指针变量:
*currentPicture; //指向当前处理的图像的指针
*currentSlice;
//指向当前的slice
Macroblock
//指向当前的宏块
SyntaxElement
MB_SyntaxElements[MAX_SYMBOLS_PER_MB];
(4) 结构体RD_DATA:这个结构体中的很多成员变量与ImageParameters中的相似,可以考虑研究一下:共有 1225 人关注过本帖
标题:如何将一个结构体的内容全都保存到一个字符串里?
等 级:新手上路
帖 子:24
结帖率:16.67%
&&已结贴√
&&问题点数:20&&回复次数:7&&&
如何将一个结构体的内容全都保存到一个字符串里?
有一个结构体,如下:
typedef&&struct{
&&& double&&&&//经度
&&& double&& //纬度
&&& int&&&&&latitude_D&&& //度
&&& int&&& latitude_C&&&&&&&&//分
&&& int&&&&&& latitude_S&&& //秒
&&& int&&&&&longitude_D&&& //度
&&& int&&& longitude_C&&&&&&&&//分
&&& int&&&&&& longitude_S&&&//秒
&&& float&&&&&&&&&&&//速度
&&& float&&&&&&&//航向
&&& float&&&&&height_&&& //水平面高度
&&& float&&&&&height_&&&&&& //海拔高度
&&& int&&&&&&&&&&&&&//卫星数
&&& uchar&&&&&NS;
&&& uchar&&&&&EW;
&&& DATE_TIME D;
}GPS_INFO;
char *context = NULL;&&GPS_INFO GPS;
我想把其中内容都放到一个字符串里 用memcpy(context, &GPS,sizeof(GPS_INFO)); 对吗?&&我怎么觉得不对啊?printf不出东西来?
搜索更多相关主题的帖子:
&&&&&&&&&&
等 级:蒙面侠
帖 子:812
专家分:4151
char *context = NULL
这只是定义一个指针吧。只是一个地址吧。或许你可以定义一个数组?
char context[1024];
一花一世界、一叶一追寻、片片花叶落、情系何人身。
等 级:版主
威 望:260
帖 子:21258
专家分:40883
概念不清之下提出的錯誤問題
授人以渔,不授人以鱼。
来 自:斗气大陆
等 级:贵宾
威 望:41
帖 子:2165
专家分:13168
有这个必要吗?
那你干嘛还要定义结构体
三十年河东,三十年河西。莫欺少年穷!
等 级:新手上路
帖 子:24
你们说该怎么做啊?光说不对。。。 那段GPS解析的,人家就这么定义的数据类型 。我试过了,很对。我是想写个函数叫通信申请 int BD1_TXSQ(u32 Dest_Address, char *context)&&想每次通信都调用这个函数。参数context作为通信内容。我不能这次调用通信 传结构体内容 ,下次调用传字符串 还写2个类型吧。&&能指明怎么回事吗?
等 级:蒙面侠
帖 子:812
专家分:4151
那你就定义一个字符数组吧。。然后把内容存在数组里
一花一世界、一叶一追寻、片片花叶落、情系何人身。
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
结构体那么多的类型在一起解析成字符串,printf打出来应该是乱七七的,或者不可见的。context 不知道有木有分配内存也是个问题,其他的应该没有了。
楼主要测试的话,可以先给context 分配一定内存,然后把结构体考进去。然后可以用memcpy每次考几个字节出来转成int float的,也可以,或者再用结构体对字符串context做个整体的强制转换到新的结构体里,一般通信应该都是整体转的,特殊除外。
好好学习,天天想上
等 级:论坛游民
帖 子:35
专家分:59
结构体变量的地址强制类型转换为char *型的。楼主要注意下context指向的空间是否需要在堆中。
版权所有,并保留所有权利。
Powered by , Processed in 0.027623 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reservedmysql如何把struct结构体保存到数据库中,以及怎么从查询结果中提取到struct结构体中来?
[问题点数:50分,结帖人roomtt]
mysql如何把struct结构体保存到数据库中,以及怎么从查询结果中提取到struct结构体中来?
[问题点数:50分,结帖人roomtt]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2010年 总版技术专家分年内排行榜第二
2009年 总版技术专家分年内排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。共有 1599 人关注过本帖
标题:用c语言,如何识别txt文件里的各种数据(汉字,阿拉伯数字,标点符号等等) ...
等 级:论坛游民
帖 子:34
专家分:40
结帖率:85.71%
&&已结贴√
&&问题点数:20&&回复次数:7&&&
用c语言,如何识别txt文件里的各种数据(汉字,阿拉伯数字,标点符号等等),并保存到相应的变量里。
具体地,我遇到了这样一个课题。
①txt文件的内容如下:(每一行的“名字”和“坐标”的顺序是任意的,可能名字在前,也可能坐标在前)
张三&&& (1,1)
李四&&& (1,2)
(1,3)&&王五
(1,4)&&周强
余涛&&& (2,1)
.....................
②我想实现的功能如下所示。
if(从文件读到的数据是名字)
&&& 则, 将它存入一个char型的数组,如char name[255]
if(从文件读到的数据是圆括号里面的第一个数字)
&&& 则, 将它存入一个int型的变量,如int x
if(从文件读到的数据是圆括号里面的第二个数字)
&&& 则, 将它存入另一个int型的变量,如int y
另外,我的打算是,将txt文件每一行的信息存储在一个结构体变量里面,结构体的定义是这样的:
typedef struct _SEAT_INFO
&&& char name[255];
} SEAT_INFO;
那么,需要一个结构体数组,来存储所有行的信息,结构体数组的定义是这样的:
SEAT_INFO info[1000];
③那么,我遇到的问题是:
1.获得。如何获得txt文件的数据
2.识别。获得txt文件的数据后,如何识别txt文件里的各种类型的数据,然后将其放入相应的结构体变量里面。
(特别再说一遍:txt文件的一行是关联在一起的信息(名字和坐标)。一行的数据存入一个结构体变量。这是需要考虑到的事情。)
④说了这么多,如果你上面看烦了,那么请只看这一点。我想知道的核心的一点是:
如何用c语言,识别txt文件里的各种类型的数据,并保存到相应的变量里。如我的题目所问的那样。脱离我要做的程序本身的话。就是:
txt文件里的内容&&&&&&&&&&&&&&&&&&&&& 存入到的数据类型
这是一个好天气&&&&&&&&&&&&&&&&&&&&&&&char words[NUM]型变量
&&&&&&73&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& int型变量
&&&&&&*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&char型变量
&&&&&&55&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& int型变量
&&&&&&(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&char型变量
搜索更多相关主题的帖子:
&&&&&&&&&&
来 自:江西财经大学
等 级:贵宾
威 望:58
帖 子:2959
专家分:10848
把每一行读取到一个字符串中,然后对字符串进行处理
就是说先全部看作字符,再把字符转化为数值
[fly]存在即是合理[/fly]
等 级:论坛游民
帖 子:55
专家分:38
先用fgets将数据取出,利用指针,在处理判断。。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&凡成大事者,各有各的方法论。
等 级:论坛游民
帖 子:34
专家分:40
回复 3楼 may大象
好的,我先试试。先谢了。
[ 本帖最后由 andrewkewang 于
10:11 编辑 ]
等 级:论坛游民
帖 子:34
专家分:40
回复 2楼 azzbcc
我用fgets()试了。
比如下面是a.txt文件的内容:
张三 (1,1)
这是我写的代码:
char buf[20];
fp = fopen(&a.txt&,&r&);
fgets(buf, strlen(buf) + 1, fp);
则,buf里的内容就成为了这样:buf[20] = &张三 (1,1)&
但问题是,汉字占两个字节,那怎么将汉字识别出来呢。
我现在知道的是,比如,
printf(&%c&,buf[4]);将打印出空格
printf(&%c&,buf[5]);将打印出'('
printf(&%c&,buf[6]);将打印出'1'
那么,buf[0]和buf[1]共同存储'张',这个怎么处理呢?
怎么将'张'这个占两个字节的字符,放到比如char name[2]的字符数组里呢?
等 级:论坛游民
帖 子:34
专家分:40
现在就是,数字,圆括号,逗号都可以识别了。由于他们都只占一个字节嘛,比较好弄。
我现在是这样识别数字的,功能倒可以实现,不知道还有没有什么更好的办法哈。
for(i = 0; i &= 9; i++)//这里的9,是buf[]数组里,元素的个数
&&& if (buf[i] &= '0' && buf[i] &= '9')
&&&&&&&&printf(&This is a number %c\n&,buf[i]);
就是汉字,现在识别不了,还没有弄出来。
请知道的朋友,帮个忙。
来 自:江西财经大学
等 级:贵宾
威 望:58
帖 子:2959
专家分:10848
&&得分:10&
程序代码:char *str = &张三&;
for (char *p = *p;++p)
&&printf(&%d\n&, *p);
[fly]存在即是合理[/fly]
等 级:论坛游民
帖 子:34
专家分:40
回复 7楼 azzbcc
谢啦。总算是可以识别汉字了。
原来可以这样获得ASCII码,这几行代码太有帮助了。
[ 本帖最后由 andrewkewang 于
10:33 编辑 ]
版权所有,并保留所有权利。
Powered by , Processed in 0.031228 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved}

我要回帖

更多关于 定义结构体数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信