#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW 0
#define OK 1
#define NULL 0
#define Value_mark 1234
int Is_Equal(unsigned int a[][10] ,int n, int col); /*判断两行数据是否完全相等*/
void End_main(); /*结束函数*/
/************************************************************************/
/* 【备注】实现对二维表的查找,原始数据采用word中数据,具体如下:
AAA BBB CCC DDD
AAA 0 1 1 4
BBB 2 2 5 3
CCC 0 1 1 4
DDD 9 9 9 9
程序在对1.txt文件读取时,出现链接中断错误,未调试成功
*/
/************************************************************************/
int main()
{
int iRowCount = 0; /*二维表的行计数器*/
int iColCount = 0; /*二维表的列计数器*/
char line[201] = {0}; /*存储初步从文件读取的数据*/
char cRowName[10][10] = {0}; /*存二维表的行字母*/
char cColName[10][10] = {0}; /*存二维表的列字母*/
int pLine = 0; /**/
int pRowX = 0, pRowY = 0; /**/
int pColX = 0, pColY = 0; /**/
int temp = 0;
int i = 0;
unsigned int iData[200] = {0}; /*存储二维表的数据*/
int pData = 0;
/***********************************读取1.txt 文件数据***************************************/
FILE *in = NULL;
in = fopen("Readfile.txt", "r"); /*打开文件1.txt*/
if ( NULL == in )
{
printf("Readfile.txt can't open /n "); /*1.txt文件打开失败*/
exit( ERROR );
}
while ( fgets(line, 200, in) ) /*按行读取文件数据,存入line中*/
{
printf("%s", line);
while ( line[pLine] != '/n') /*判断是否一行结束*/
{
if ( 0 == iRowCount )
{
if ( line[pLine] != 9 ) /*判断是否试题否出现制表符)*/
{
cColName[pColX][pColY] = line[pLine];
pColY++;
}
else
{
cColName[pColX][pColY] = '/0';
pColX++;
pColY = 0;
iColCount++;
}
}
else
{
if ( line[pLine] != 9 )
{
if ( 0 == temp )
{
cRowName[pRowX][pRowY] = line[pLine];
pRowY++;
}
else
{
iData[pData] = atoi(&line[pLine]) ; /*将char型数据转换成为unsigned int型数据*/
pData++;
}
}
else
{
temp = 1;
}
}
pLine++;
}
pLine = 0;
iRowCount++;
temp = 0;
pRowX++;
pRowY = 0;
}
fclose(in); /*关闭1.txt文件*/
iRowCount--;
printf("/n");
/*****************************屏幕输出1.txt文件数据**************************************************/
printf("ROW COUNT : %d/n",iRowCount); /*输出二维表的行、列个数*/
printf("COLUMN COUNT : %d/n",iColCount);
printf("/n");
printf("ROW NAME:"); /*输出二维表的行名*/
for ( i = 1; i < iRowCount + 1; i++ )
{
printf("%s/t",cRowName[i]);
}
printf("/n");
printf("COLUMN NAME:"); /*输出二维表的列名*/
for ( i = 1; i < iColCount + 1; i++ )
{
printf("%s/t",cColName[i]);
}
printf("/n");
printf("/n");
printf("DATA:"); /*输出二维表的数据*/
for ( i = 0; i < iRowCount * iColCount; i++ )
{
if ( i % 4 == 0 )
{
printf("/n");
printf("%d/t",iData[i]);
}
else
{
printf("%d/t",iData[i]);
}
}
printf("/n");
/***************************************将数据写入2.h文件***********************************************/
unsigned int uiData[10][10]; /*按照矩阵存储二维表数据*/
for ( i = 0; i < iRowCount * iColCount; i++ )
{
uiData[i/iColCount][i%iColCount] = iData[i];
}
FILE* out;
out = fopen("OutFile.h","w"); /*打开文件2.h*/
if ( NULL == out )
{
printf("OutFile.h can't open /n "); /*打开文件2.h失败*/
exit( ERROR );
}
int iIs_Equal = 0; /*判断行相等标记变量*/
int temcount = 0; /*行相等标记计数器*/
for ( i = 1; i < iRowCount+1; i++ )
{
iIs_Equal = Is_Equal( uiData, i, iColCount );
if ( Value_mark == iIs_Equal )
{
fprintf(out, "#define ROW_%s/t/t%d/n", cRowName[i], i-1-temcount);
}
else
{
temcount++;
fprintf(out, "#define ROW_%s/t/t%s/n", cRowName[i], cRowName[iIs_Equal]);
}
}
fprintf(out, "#define ROW_COUNT/t%d/n", iRowCount);
fprintf(out, "/n");
for ( i = 1; i < iColCount+1; i++ )
{
fprintf(out, "#define COLUMN_%s/t%d/n", cColName[i], i-1);
}
fprintf(out, "#define COLUMN_COUNT/t%d/n", iColCount);
fprintf(out, "/n");
fprintf(out, "/n");
fprintf(out, "static unsigned int nuiTableData_a[][COLUMN_COUNT] = {/n"); /*输出二维表数据*/
for ( i = 0; i < iRowCount; i++ )
{
fprintf(out, "/t");
for ( int j = 0; j < iColCount; j++ )
{
if ( i == iRowCount - 1 && j == iColCount -1 )
{
fprintf(out, "%d",uiData[i][j]);
}
else
{
fprintf(out, "%d,",uiData[i][j]);
}
}
fprintf(out, "/n");
}
fprintf(out, "};");
fprintf(out, "/n/n");
fprintf(out, "STableContext nstTestTable =/n");
fprintf(out, "{ ROW_COUNT, COLUMN_COUNT, nuiTableData_a };/n");
fclose(out); /*关闭2.h文件*/
End_main();
return 0;
}
/************************************************************************/
/* 函数名:Is_Equal */
/* 函数功能:判断两行数据是否完全相同 */
/* 函数形参:unsigned int a[][10] 存储数据,int row 行, int col 列 */
/* 返回值:OK--销毁成功,ERROR---创建失败, OVERFLOW---申请空间失败 */
/* 作者:Sunny */
/************************************************************************/
int Is_Equal(unsigned int a[][10] ,int row, int col)
{
int count = 0;
for ( int i = 0; i < row - 1; i++ )
{
for ( int j = 0; j < col; j++ )
{
if ( a[i][j] != a[row-1][j] )
{
break;
}
else
{
count++;
}
}
if ( col == count )
{
i++;
return i;
}
else
{
count = 0;
}
}
return Value_mark;
}
/************************************************************************/
/* 函数名:End_main */
/* 函数功能: */
/* 函数形参: */
/* 返回值: */
/* 作者:Sunny */
/************************************************************************/
void End_main()
{
fflush(stdin);//清理缓存
printf("/n/nPress any key to continue....");
getchar();
}