| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2862 人关注过本帖
标题:C语言读取文件,查找字符。。。。(高手帮忙看看,小弟搞了好几天了)
只看楼主 加入收藏
cz737
Rank: 2
等 级:论坛游民
帖 子:85
专家分:20
注 册:2010-7-7
结帖率:96.3%
收藏
已结贴  问题点数:20 回复次数:15 
C语言读取文件,查找字符。。。。(高手帮忙看看,小弟搞了好几天了)
这代码帮我看看那里有错,我是想读取了一个文件找出了tmp1,和tmp2然后打开另一个文件,在里面查找这个,找到了就输出这一行的内容,但是这样写代码好像不行 啊。。
#include "stdio.h"
#include "stdlib.h"
#include <string.h>


struct info
{
       char name[10];
       char guojia[50];
       char chengshi[80];
       float x;
       float y;
       char shiqu[3];
}weater_test[9000];

void main()
{         
    FILE *fileout;
    FILE *fileout_id;
    char test_char[123];
    int lenght ,i,j;

    char tmp1[123];
    char tmp2[123];
   


    fileout = fopen("weather","r");

    if(fileout == NULL)
        {
        printf("open file false\n");
        exit(1);
        }

    lenght=fread(test_char,1,sizeof(test_char),fileout);
    fclose(fileout);
    printf("length=%d\n",lenght);

    for(i=0;i<lenght;i++)
        {
            
            if((test_char[i]=='g')&&(test_char[i+1] == '('))
                    j = i+2;
            if(test_char[i] == ',')
                    {
                    memcpy(tmp1,test_char+j,i-j);
                    
                    printf("%s\n",tmp1);        
                    break;   
                    }
        }
   
        for(i=0;i<lenght;i++)
        {
            
            if((test_char[i]==',')&&(test_char[i+1] == ' '))
                    j = i+2;
            if((test_char[i] == ')')&&(test_char[i+1] == ','))
                    {
                    memcpy(tmp2,test_char+j,i-j);
                    
                    printf("%s\n",tmp2);        
                    break;   
                    }
        
        }
        

 
fileout_id=fopen("weather_id.txt","r");

       if(fileout_id == NULL)
        {
        printf("open fileout_id error\n");
        exit(1);
        }

 for(i =0; feof(fileout_id) != 0; i++ )
      
      fscanf( fileout_id, "%s,%s,%s,%f,%f,%s", weater_test[i].name, weater_test[i].guojia,  weater_test[i].chengshi,  &weater_test[i].x,  &weater_test[i].y,  weater_test[i].shiqu );
   
   fclose(fileout_id);
   
   //  for(i=0;(weater_test[i].x== *tmp1 && weater_test[i].y== *tmp2);i++);
 
 //   printf( "%s,%s,%s,%f,%f,%s", weater_test[i].name,weater_test[i].guojia, weater_test[i].chengshi, &weater_test[i].x, &weater_test[i].y, weater_test[i].shiqu );

}
        
        
        



[ 本帖最后由 cz737 于 2010-7-16 15:46 编辑 ]
搜索更多相关主题的帖子: C语言 字符 文件 
2010-07-16 15:36
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:0 
程序代码:
            if((test_char[i]=='g')&&(test_char[i+1] == '('))
                    j = i+2;
            if(test_char[i] == ',')
                    {
                    memcpy(tmp1,test_char+j,i-j);
                   
                    printf("%s\n",tmp1);       
                    break;   
                    }
以上这几行LZ说说你的想法吧,还有请LZ把你要读的文件贴出来
2010-07-16 16:31
cz737
Rank: 2
等 级:论坛游民
帖 子:85
专家分:20
注 册:2010-7-7
收藏
得分:0 
我是先读取    map.setCenter(new GLatLng(22.5333, 114.1333), 5);这里面的22.5333, 114.1333这两个坐标,ls说的是我在读取坐标用的语句,然后再打开另一个文件查找。。
另外一个文件内容比较多部分内容如下
CHXX0112,Qiqihar,China,47.3408333,123.9672222,+8
CHXX0113,Qitai,China,10000,10000,+0
CHXX0114,Quanzhou,China,24.9138889,118.5858333,+8
CHXX0115,Shache,China,38.4166667,77.2405556,+8
CHXX0116,Shanghai,China,31.005,121.4086111,+8
CHXX0117,Shaoxing,China,30.0016667,120.5811111,+8
CHXX0118,Shashi,China,30.3072222,112.2447222,+8
CHXX0119,Shenyang,China,41.7922222,123.4327778,+8
CHXX0120,Shenzhen,China,22.5333333,114.1333333,+8
CHXX0121,Shiguaigou,China,10000,10000,+0
CHXX0122,Shijiazhuang,China,10000,10000,+0
CHXX0123,Shilong,China,23.1144444,113.8472222,+8
CHXX0124,Shuangcheng,China,45.35,126.2833333,+8
CHXX0125,Shule,China,10000,10000,+0
CHXX0126,Stanley,China,10000,10000,+0
CHXX0127,Suining,China,30.5333333,105.5333333,+8
2010-07-16 16:42
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:0 
这样那下面的呢?
            if(test_char[i] == ',') //这个什么意思
                    {
                    memcpy(tmp1,test_char+j,i-j);
                  
                    printf("%s\n",tmp1);      
                    break;   
                    }
2010-07-16 16:50
cz737
Rank: 2
等 级:论坛游民
帖 子:85
专家分:20
注 册:2010-7-7
收藏
得分:0 
这个我是分别读取了22.5333和114.1333这个分别放到tmp1和tmp2中 的然后打印出来了
前面是读到“,”为止,后面的读取从空格读起


[ 本帖最后由 cz737 于 2010-7-16 16:58 编辑 ]
2010-07-16 16:57
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct info
{
       char name[10];
       char guojia[50];
       char chengshi[80];
       float x;
       float y;
       char shiqu[3];
}weater_test[9000];

int main()
{        
    FILE *fileout;
    FILE *fileout_id;
   
    char test_char[123];
    int lenght ,i,j;
    char tmp1[123];
    char tmp2[123];

    fileout = fopen("weather","r");
    if(fileout == NULL)
    {
        printf("open file false\n");
        exit(1);
    }

    fread(test_char,1,sizeof(test_char)-1,fileout);
   
    lenght=strlen(test_char);

    for(i=0;i<lenght;i++)
        if((test_char[i]=='g')&&(test_char[i+1] == '('))
        {
            i = i+2;
            break;
        }
   
    j=0;
    while(test_char[i]!=',')
    {
        tmp1[j]=test_char[i];   
        i++;
        j++;
    }
    tmp1[j]='\0';
    printf("tmp1:%s\n",tmp1);
   
    i=i+2;
    j=0;
    while(test_char[i]!=')')
    {
        tmp2[j]=test_char[i];
        i++;
        j++;
    }
    tmp2[j]='\0';
    printf("tmp2:%s\n",tmp2);
       
    fileout_id=fopen("weather_id.txt","r");
    if(fileout_id == NULL)
    {
        printf("open fileout_id error\n");
        exit(1);
    }

    for(i =0; !feof(fileout_id); i++ )
       fscanf( fileout_id, "%s,%s,%s,%f,%f,%s", weater_test[i].name, weater_test[i].guojia,  weater_test[i].chengshi,  &weater_test[i].x,  &weater_test[i].y,  weater_test[i].shiqu );
  
   fclose(fileout_id);
   
   //  for(i=0;(weater_test[i].x== *tmp1 && weater_test[i].y== *tmp2);i++);

//   printf( "%s,%s,%s,%f,%f,%s", weater_test[i].name,weater_test[i].guojia, weater_test[i].chengshi, &weater_test[i].x, &weater_test[i].y, weater_test[i].shiqu );

}
       
就这样吧,吃饭去了,还有什么问题的话晚上再帮你改
2010-07-16 17:18
cz737
Rank: 2
等 级:论坛游民
帖 子:85
专家分:20
注 册:2010-7-7
收藏
得分:0 
可以正确读出坐标

[ 本帖最后由 cz737 于 2010-7-16 18:14 编辑 ]
2010-07-16 17:28
cz737
Rank: 2
等 级:论坛游民
帖 子:85
专家分:20
注 册:2010-7-7
收藏
得分:0 
程序还是只能输出前面的tmp1和tmp2后面读取第二个文件的语句好像是没起作用呢,不能输出内容啊。。
后面注释掉的那两行好像是没起作用,我取消的注释
是我写的条件有错误码



[ 本帖最后由 cz737 于 2010-7-16 17:57 编辑 ]
2010-07-16 17:32
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:0 
回复 8楼 cz737
知道了,我一会改完发给你
2010-07-16 18:35
zhangxf1989
Rank: 6Rank: 6
等 级:侠之大者
帖 子:96
专家分:419
注 册:2009-9-5
收藏
得分:20 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct info
{
       char name[10];
       char guojia[50];
       char chengshi[80];
       float x;
       float y;
       char shiqu[3];
}weater_test[9000];

int main()
{
    FILE *fileout;
    FILE *fileout_id;
   
    char test_char[123],*endp;
    int lenght ,i,j,infonum=0;
    char tmp1[123];
    char tmp2[123];
    char tempinfo[6][80];
    float pointx,pointy;
   
    fileout = fopen("weather","r");
    if(fileout == NULL)
    {
        printf("open file false\n");
        exit(1);
    }

    fread(test_char,1,sizeof(test_char)+1,fileout);
   
    lenght=strlen(test_char);

    for(i=0;i<lenght;i++)
        if((test_char[i]=='g')&&(test_char[i+1] == '('))
        {
            i = i+2;
            break;
        }
   
    j=0;
    while(test_char[i]!=',')
    {
        tmp1[j]=test_char[i];   
        i++;
        j++;
    }
    tmp1[j]='\0';
    pointx=strtod(tmp1,&endp);
    printf("tmp1:%s\n",tmp1);
   
    i=i+2;
    j=0;
    while(test_char[i]!=')')
    {
        tmp2[j]=test_char[i];
        i++;
        j++;
    }
    tmp2[j]='\0';
    pointy=strtod(tmp2,&endp);
    printf("tmp2:%s\n",tmp2);
       
    fileout_id=fopen("weather_id.txt","r");
    if(fileout_id == NULL)
    {
        printf("open fileout_id error\n");
        exit(1);
    }

    for(i =0; !feof(fileout_id); i++ )
    {   
        test_char[0]='\0';
        fgets(test_char,sizeof(test_char)-1,fileout_id);
        if(test_char[0]!='\0'&&test_char[0]!='\n')
        {
            j=0;
            lenght=0;
            for(i=0;test_char[i]!='\0';i++)
            {
                if(test_char[i]!=',')
                {
                    tempinfo[j][lenght]=test_char[i];
                    lenght++;
                }
                else
                {
                    tempinfo[j][lenght]='\0';   
                    j++;               
                    lenght=0;
                }               
            }
            strcpy(weater_test[infonum].name,tempinfo[0]);
            strcpy(weater_test[infonum].guojia,tempinfo[1]);
            strcpy(weater_test[infonum].chengshi,tempinfo[2]);
            weater_test[infonum].x=strtod(tempinfo[3],&endp);
            weater_test[infonum].y=strtod(tempinfo[4],&endp);
            strcpy(weater_test[infonum].shiqu,tempinfo[5]);
            infonum++;
        }
    }
   
   fclose(fileout_id);
   
   for(i=0;i<infonum;i++)
    {
        if(fabs(pointx-weater_test[i].x)<0.00001)
            if(fabs(pointy-weater_test[i].y)<0.00001)
                printf( "%s,%s,%s,%f,%f,%s", weater_test[i].name,weater_test[i].guojia, weater_test[i].chengshi,
                            weater_test[i].x, weater_test[i].y, weater_test[i].shiqu );
    }
}
       
2010-07-16 19:15
快速回复:C语言读取文件,查找字符。。。。(高手帮忙看看,小弟搞了好几天了)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.085003 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved