我这样设计类是否合理?欢迎提出意见和建议!!!300分,见者有分! (300分)

  • 主题发起人 Szhenhai
  • 开始时间
S

Szhenhai

Unregistered / Unconfirmed
GUEST, unregistred user!
以前写程序时很少自己设计类,今天一试,发现问题多多。这是我现在做的一个项目中的一部分,这部分要求从一个文本文件中(这个文件是一个有限元程序仿真运算生成的结果文件)将数据读出来,然后用OpenGL将这个仿真过程还原出来,现在主要是如何设计一个合理的模块来对文件进行读取。先看一下文件结构(各个参数我已经作了注释):


/*五个参数: 节点数NodeCount、参数1(没用)Para1、参数2(没用)Para2、网格数CellCount、物理参量个数ParaCount*/
56 0 0 46 10
/*以下10行为各个物理参量的名称 ParaName*/
displacement
velocity
acceleration
midsurface x-stress
midsurface y-stress
midsurface z-stress
midsurface xy-stress
midsurface yz-stress
midsurface zx-stress
midsurface effective plastic strain
/*各个节点Node的初始x,y,z坐标(最后一个数代表节点Node编号)*/
-1.70711E+01-2.07107E+00 2.07107E+00 1
-7.07107E+00-5.00000E+00-1.50000E+01 2
-1.37377E+01-3.04738E+00-3.61929E+00 3
-1.04044E+01-4.02369E+00-9.30964E+00 4
-7.07107E+00 1.50000E+01 5.00000E+00 5
-1.04044E+01 9.30964E+00 4.02369E+00 6
-1.37377E+01 3.61929E+00 3.04738E+00 7
2.92893E+00 1.20711E+01-1.20711E+01 8
-4.04401E-01 1.30474E+01-6.38071E+00 9
-3.73773E+00 1.40237E+01-6.90356E-01 10
-3.73773E+00 6.90356E-01-1.40237E+01 11
-4.04401E-01 6.38071E+00-1.30474E+01 12
-7.07107E+00 1.66667E+00-8.33333E+00 13
-3.73773E+00 7.35702E+00-7.35702E+00 14
-1.04044E+01 2.64298E+00-2.64298E+00 15
-7.07107E+00 8.33333E+00-1.66667E+00 16
7.07107E+00-1.50000E+01-5.00000E+00 17
1.70711E+01 2.07107E+00-2.07107E+00 18
1.04044E+01-9.30964E+00-4.02369E+00 19
1.37377E+01-3.61929E+00-3.04738E+00 20
7.07107E+00 5.00000E+00 1.50000E+01 21
1.37377E+01 3.04738E+00 3.61929E+00 22
1.04044E+01 4.02369E+00 9.30964E+00 23
-2.92893E+00-1.20711E+01 1.20711E+01 24
3.73773E+00-6.90356E-01 1.40237E+01 25
4.04401E-01-6.38071E+00 1.30474E+01 26
4.04401E-01-1.30474E+01 6.38071E+00 27
3.73773E+00-1.40237E+01 6.90356E-01 28
7.07107E+00-8.33333E+00 1.66667E+00 29
3.73773E+00-7.35702E+00 7.35702E+00 30
1.04044E+01-2.64298E+00 2.64298E+00 31
7.07107E+00-1.66667E+00 8.33333E+00 32
2.35702E+00-1.16667E+01-8.33333E+00 33
-2.35702E+00-8.33333E+00-1.16667E+01 34
7.64298E+00 8.73773E+00-8.73773E+00 35
1.23570E+01 5.40440E+00-5.40440E+00 36
5.69036E+00-5.97631E+00-7.35702E+00 37
9.02369E+00-2.85955E-01-6.38071E+00 38
9.76311E-01-2.64298E+00-1.06904E+01 39
4.30964E+00 3.04738E+00-9.71405E+00 40
-7.64298E+00-8.73773E+00 8.73773E+00 41
-1.23570E+01-5.40440E+00 5.40440E+00 42
-9.76311E-01-1.06904E+01-2.64298E+00 43
-5.69036E+00-7.35702E+00-5.97631E+00 44
-4.30964E+00-9.71405E+00 3.04738E+00 45
-9.02369E+00-6.38071E+00-2.85955E-01 46
-2.35702E+00 1.16667E+01 8.33333E+00 47
2.35702E+00 8.33333E+00 1.16667E+01 48
9.02369E+00 6.38071E+00 2.85955E-01 49
5.69036E+00 7.35702E+00 5.97631E+00 50
4.30964E+00 9.71405E+00-3.04738E+00 51
9.76311E-01 1.06904E+01 2.64298E+00 52
-5.00000E+01-2.00000E+01-5.00000E+01 53
-5.00000E+01-2.00000E+01 5.00000E+01 54
5.00000E+01-2.00000E+01 5.00000E+01 55
5.00000E+01-2.00000E+01-5.00000E+01 56
/*各个网格Cell所拥有的节点Node(每个网格有四个节点构成一个四边形,前四个数为节点编号,
第五个为所属部分Part编号(一个Part由多个Cell组成),最后一个为Cell编号)*/
2 4 13 11 2 1
4 3 15 13 2 2
3 1 7 15 2 3
11 13 14 12 2 4
13 15 16 14 2 5
15 7 6 16 2 6
12 14 9 8 2 7
14 16 10 9 2 8
16 6 5 10 2 9
17 19 29 28 2 10
19 20 31 29 2 11
20 18 22 31 2 12
28 29 30 27 2 13
29 31 32 30 2 14
31 22 23 32 2 15
27 30 26 24 2 16
30 32 25 26 2 17
32 23 21 25 2 18
17 33 37 19 2 19
33 34 39 37 2 20
34 2 11 39 2 21
19 37 38 20 2 22
37 39 40 38 2 23
39 11 12 40 2 24
20 38 36 18 2 25
38 40 35 36 2 26
40 12 8 35 2 27
17 28 43 33 2 28
28 27 45 43 2 29
27 24 41 45 2 30
33 43 44 34 2 31
43 45 46 44 2 32
45 41 42 46 2 33
34 44 4 2 2 34
44 46 3 4 2 35
46 42 1 3 2 36
18 36 49 22 2 37
36 35 51 49 2 38
35 8 9 51 2 39
22 49 50 23 2 40
49 51 52 50 2 41
51 9 10 52 2 42
23 50 48 21 2 43
50 52 47 48 2 44
52 10 5 47 2 45
53 54 55 56 1 46
/*时刻1时的各个物理参量的值*/
state # 1 time= 0.00000E+00
/*时刻1时各个Node的坐标相对上一状态变化量,因是时刻1,所以各个值均为零,在时刻2,3...数值都有变化*/
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
/*时刻1时各个Node的velocity(见文件开始部分)*/
1
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 -0.200E+03 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
/*时刻1时各个Node的(见文件开始部分)acceleration*/
1
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 -0.386E+03 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00
/*时刻1时各个Node的(见文件开始部分)midsurface x-stress*/
1
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00
/*时刻1时各个Node的(见文件开始部分)midsurface y-stress*/
1
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00
/*时刻1时各个Node的(见文件开始部分)midsurface z-stress*/
1
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00
/*时刻1时各个Node的(见文件开始部分)midsurface xy-stress*/
1
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00
/*时刻1时各个Node的(见文件开始部分)midsurface yz-stress*/
1
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00
/*时刻1时各个Node的(见文件开始部分)midsurface zx-stress*/
1
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00
/*时刻1时各个Node的(见文件开始部分)midsurface effective plastic strain*/
1
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
0.000E+00 0.000E+00
1
/*时刻2时各个物理参量的值(格式同时刻1)*/
state # 2 time= 0.49998E+00
.....................................
.....................................
.....................................


.....................................

现在有以下问题:
1、因为时刻比较多,所以文件比较大,如何快速读取文件?
2、由于节点数NodeCount、网格数CellCount、物理参量个数ParaCount等各个参数的值都只能在文件的第一行得到,且文件后面的各个部分的长短都会根据这些参数变化,而且程序在运行时可以选择某一个文件作为数据源,所以我想设计几个类来对文件进行操作,下面是我的初步设计:
(1)TAvsNodeStatePara //Node的状态参量。
type
TAvsNodeStatePara = class(TObject)
private
FParaID: Integer;
FParaName: string;
FParaValue: Double;
function GetParaValue: Double;
procedure SetParaValue(Value: Double);
public
//状态参量的编号。
property ParaID: Integer read FParaID write FParaID;
//状态参量的名称。
property ParaName: string read FParaName write FParaName;
状态参量的值。
property ParaValue: Double read GetParaValue write SetParaValue;
end;

(2)TAvsNodeState //Node的状态信息。
type
TAvsNodeState = class(TObject)
private
FCurrentTime: Double;
FNodeID: Integer;
FStateID: Integer;
FStateName: string;
FStatePara: TAvsNodeStatePara;
function GetStatePara: TAvsNodeStatePara;
procedure SetStatePara(Value: TAvsNodeStatePara);
public
//状态的当前时间。
property CurrentTime: Double read FCurrentTime write FCurrentTime;
//Node编号。
property NodeID: Integer read FNodeID write FNodeID;
//状态信息编号。
property StateID: Integer read FStateID write FStateID;
//状态名称。
property StateName: string read FStateName write FStateName;
//状态参量。
property StatePara: TAvsNodeStatePara read GetStatePara write SetStatePara;
end;
(3)TAvsNode //描述Node的相关信息。
type
TCoordinateRec = record
X: Double;
Y: Double;
Z: Double;
end;

TAvsNode = class(TObject)
private
FCoordinate: TCoordinateRec;
FCurrentStateID: Integer;
FNodeCurState: TAvsNodeState;
FNodeID: Integer;
FStateCount: Integer;
function GetCoordinate: TCoordinateRec;
function GetNodeCurState: TAvsNodeState;
function GetX: Double;
function GetY: Double;
function GetZ: Double;
procedure SetCoordinate(Value: TCoordinateRec);
procedure SetNodeCurState(Value: TAvsNodeState);
procedure SetX(Value: Double);
procedure SetY(Value: Double);
procedure SetZ(Value: Double);
public
property Coordinate: TCoordinateRec read GetCoordinate write SetCoordinate;
//当前状态的编号。
property CurrentStateID: Integer read FCurrentStateID write FCurrentStateID;
//Node的当前状态。
property NodeCurState: TAvsNodeState read GetNodeCurState write
SetNodeCurState;
//Node的编号。
property NodeID: Integer read FNodeID write FNodeID;
//状态的总数。
property StateCount: Integer read FStateCount write FStateCount;
//Node的X坐标。
property X: Double read GetX write SetX;
//Node的Y坐标。
property Y: Double read GetY write SetY;
//Node的Z坐标。
property Z: Double read GetZ write SetZ;
end;
(4)TAvsCell //描述Cell的相关信息。
type
TAvsCell = class(TObject)
private
FNodesCount: Integer;
FPartID: Integer;
function GetAvsPart: TAvsPart;
function GetCellID: Integer;
function GetSonNodes: TAvsNode;
procedure SetAvsPart(Value: TAvsPart);
procedure SetCellID(Value: Integer);
procedure SetSonNodes(Value: TAvsNode);
public
//向Cell中添加Node。
procedure AddNodes;
//读取Cell中的Node。
procedure GetNodes;
property AvsPart: TAvsPart read GetAvsPart write SetAvsPart;
//当前Cell的编号。
property CellID: Integer read GetCellID write SetCellID;
//Cell中包含的Node的总数。
property NodesCount: Integer read FNodesCount write FNodesCount;
//所属Part。
property PartID: Integer read FPartID write FPartID;
//Cell包含的Node。
property SonNodes: TAvsNode read GetSonNodes write SetSonNodes;
end;

这种设计是否合理?有哪些不足和要改进的地方?
3、但对读取文件的类TAvsFile的设计以及如何将读取得到值保存到上面设计类的实例中,我还没有好的思路,各位说说该怎样设计最好?
4、这样设计,我发现其中有好多数据冗余,比如每个NodeState都有StateName这个属性,如果每个Node的NodeState都存StateName,岂不是要消耗很多的内存?怎样处理这种情况?

先问这么多,先谢谢您有耐心看完,见者有分!
 
K

kkkchenA

Unregistered / Unconfirmed
GUEST, unregistred user!
L

lzy6204

Unregistered / Unconfirmed
GUEST, unregistred user!
老兄,这么多啊
看起来好费劲啊!~
 
S

Szhenhai

Unregistered / Unconfirmed
GUEST, unregistred user!
不好意思,贴的太少的话,怕说不明白.
 

谢方

Unregistered / Unconfirmed
GUEST, unregistred user!
如果你能控制数据的写入的话,何不用记录的方式写入,写成文本文件当然太大了。读起来又慢。
 
S

Szhenhai

Unregistered / Unconfirmed
GUEST, unregistred user!
文本文件是由另外一个软件生成的结果文件,我只是从中读取数据,所以不是写文本文件,而是如何快速读取的问题。
 
H

hardware007

Unregistered / Unconfirmed
GUEST, unregistred user!

中国菠萝

Unregistered / Unconfirmed
GUEST, unregistred user!
**且文件后面的各个部分的长短都会根据这些参数变化 **

只要有分隔符,长短的变化都无所谓,下面是我以前读取文本文件到数据库的一段程序,各个部分以空格作分隔符,希望对你有所帮助

procedure TForm1.Button13Click(Sender: TObject);
var
i:integer;
myfile:TextFile;
s1,s2,ch:string;
begin
//关联文件
assignfile(myfile,'funct.txt');
reset(myfile);//打开文件
i:=0;
while not eof(myfile) do//如果有记录
begin
i:=i+1;
table1.Append;
table1.FieldByName('number').asfloat:=i;
readln(myfile,s1);
ch:=copy(s1,1,1);
while ch=' ' do
begin
delete(s1,1,1);
ch:=copy(s1,1,1);
end;
ch:=copy(s1,1,1);
s2:='';
while ch<>' ' do
begin
s2:=s2+ch;
delete(s1,1,1);
ch:=copy(s1,1,1);
end;
dbedit1.Text:=s2;

ch:=copy(s1,1,1);
while ch=' ' do
begin
delete(s1,1,1);
ch:=copy(s1,1,1);
end;
ch:=copy(s1,1,1);
s2:='';
while ch<>' ' do
begin
s2:=s2+ch;
delete(s1,1,1);
ch:=copy(s1,1,1);
end;
dbedit2.Text:=s2

ch:=copy(s1,1,1);
while ch=' ' do
begin
delete(s1,1,1);
ch:=copy(s1,1,1);
end;
dbedit3.text:=s1;
table1.Post;
{ch:=copy(s1,1,1);
s2:='';
while ch<>' ' do
begin
s2:=s2+ch;
delete(s1,1,1);
ch:=copy(s1,1,1);
end;
dbedit3.Text:=s2;}
end;
end;
 
S

Szhenhai

Unregistered / Unconfirmed
GUEST, unregistred user!
多谢中国菠萝。

我现在有两方面的问题:一是文件的格式分析及快速读取(因为文件格式不太规范而且比较大);二是如何定义自己的类结构来保存这些数据,因为项目不仅要对文件进行读取和OpenGL显示,还要将数据存到数据库中以便日后查询,同时还要对这些结果数据进行分析(要生成一些报表和图表)。所以我想在这里将数据封装好,后面的工作会简单一些。只是我在这方面是在缺乏经验,所以请大家多多指教。
 
R

riipgah

Unregistered / Unconfirmed
GUEST, unregistred user!
没看完,太长了
 
S

seasunsky

Unregistered / Unconfirmed
GUEST, unregistred user!
太长了,看晕了。老兄,你这个数据是不是用Matlab算的?看看有没有接口能直接把数据存入数据库吧?另外,能不能把你想要实现的工作总体思路给讲讲吧,这样看着太累了。
 
A

aimeoo

Unregistered / Unconfirmed
GUEST, unregistred user!
鎴戜篃鏅曚簡锛丏涓
 
S

sunline

Unregistered / Unconfirmed
GUEST, unregistred user!
没看完,眼睛有点痛了,帮你顶一下
 
Z

zhangyt999

Unregistered / Unconfirmed
GUEST, unregistred user!
最好的方法还是数据采集时直接分类分检数据
 
I

ing

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要花多久才能理解你的意圖。太長了。
能把問題寫短點嗎?
看了就想睡覺﹗
 
Z

zjan521

Unregistered / Unconfirmed
GUEST, unregistred user!
楼主的问题可以说比较详细,但是太长了,你完全可以把所列数据
-1.70711E+01-2.07107E+00 2.07107E+00 1
-7.07107E+00-5.00000E+00-1.50000E+01 2
..............................................
5.00000E+01-2.00000E+01-5.00000E+01 56
这样表示足够了.

思路.最好的思路,最高的效率就是自然,自自然然的把数据表示出来,不要强求自以为的逻辑.否则适得其反,逻辑性/效率/可维护性都不高.
思路.具体思路就是自然的按照文件的组织结构.文件头的参量部分不予考量,楼主可以按照自己的想法.至于下面的数据.原则就是每一行对应一个record(实现可以由动态分配,自然亦可以由数组模拟).
比如

//数据全部栽入内存,别告诉我你的数据有几个G
TAvsNodeRec = record
NodeID: Integer
//似乎可以去掉
X, Y, Z: Integer;
end;
PAvsNodeRec = ^TAvsNodeRec;


{TAvsNodeList = class(TList)
end;}//直接利用TList也可以
TAvsNodeList = class(TObject)
private
//FNodeArr: Array of TAvsNodeRec;//注意初始化
FMemPtr: PAvsNodeRec;
FCount: Integer;
protected
procedure InitMem(nCount: Integer);//分配内存
{
FreeMem(FMemPtr)
FMemPtr:= nil
FCount:= 0;//不考虑保留数据
try
FMemPtr:= GetMem(SizeOf(TAvsNodeRec)*nCount);
FCount:= FMemPtr;
ZeroMemory(FMemPtr, SizeOf(TAvsNodeRec)*nCount);
except
..
end;
}
public
property Count: Integer read FCount;
property NodePtr[Index: Integer]: PAvsNodeRec read GetNodePtr

end;
其他的数据类型如此照搬
TAvsFile = class(TObject)
private
public
procedure LoadFromFile(FileName: string);
property FileName: string read FFileName;
public
property NodeList: TNodeList read FNodeList;
....
end;
 
S

SeptSky

Unregistered / Unconfirmed
GUEST, unregistred user!
强烈推荐使用TStringList类来读取每行的数据
List.Delimiter := 空格
List.DelimitedText := 数据行
然后该行数据自动分解为字符串型的数据列表
使用FloatToStr()转换为浮点数据
另外,读取文本文件使用TextList.LoadFromFile();
如此一来,一切都变得很简单了!!!!!!!!!
 

Similar threads

I
回复
0
查看
922
import
I
I
回复
0
查看
623
import
I
I
回复
0
查看
650
import
I
I
回复
0
查看
720
import
I
顶部