1234567

#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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值