我的文档保存格式如下,文件名output.txt,20100820是日期。
20100820 up:xxxxxx down:yyyyyy (x和y位数不确定)
20100822 up:xxxxxx down:yyyyyy
20100830 up:xxxxxx down:yyyyyy
.....
要求是用一个函数getUp(int year,int mon,int day)返回一条记录中的xxxxxx,
用另外一个函数getdown(int year,int mon,int day)返回一条记录中的yyyyyy。
如getUp(2010,08,20)返回xxxxxx,getdown(2010,08,20)返回yyyyyy。
如果我的文档格式不便于实现函数,也可以按你自己设置的文档格式达到上述功能,谢谢啊!
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>
using namespace std;
//记录数据结构
struct DataLine
{
string dateTime;
string up;
string down;
};
//从文件中获取一行数据
void GetLine(FILE *pInFile,string *pInOutLine)
{
char c = 0;
if ( NULL == pInOutLine || NULL == pInFile)
{
return;
}
pInOutLine->clear();
while ( true )
{
fread(&c,1,1,pInFile);
if ( c != '\n' && ! feof(pInFile) )
{
pInOutLine->push_back(c);
}
else
{
break;
}
}
}
//将一行数据转换为记录数据结构
void TranslateDataStruct(string *pInLine,DataLine *pInOutStruct)
{
int DateEndPos = 0;
int UpStartPos = 0;
int UpEndPos = 0;
int DownStartPos = 0;
//下面的两个定义根据你文件中up和down的标志来定义
//文件中将全角冒号(:)替换为半角冒号(:)
string UP_FLAG("up:");
string DOWN_FLAG("down:");
if ( NULL == pInLine || NULL == pInOutStruct )
{
return;
}
DateEndPos = pInLine->find(UP_FLAG,0);
UpStartPos = DateEndPos + UP_FLAG.length();
UpEndPos = pInLine->find(DOWN_FLAG,UpStartPos);
DownStartPos = UpEndPos + DOWN_FLAG.length();
pInOutStruct->dateTime = pInLine->substr(0,DateEndPos-1);
pInOutStruct->up = pInLine->substr(UpStartPos,UpEndPos - UpStartPos - 1);
pInOutStruct->down = pInLine->substr(DownStartPos);
}
//获取UP及DOWN
string getUpOrDown(vector<DataLine> *allDatas, int year, int mon, int day, bool isGetUp)
{
string inDateTime("");
char tmpSzInDateTime[100];
if ( NULL == allDatas )
{
return string("");
}
memset(tmpSzInDateTime,0x0,sizeof(tmpSzInDateTime));
sprintf(tmpSzInDateTime,"%04d%02d%02d",year,mon,day);
inDateTime.append(tmpSzInDateTime);
for ( unsigned long i = 0 ; i < allDatas->size() ; i++ )
{
if ( allDatas->at(i).dateTime == inDateTime )
{
if ( isGetUp )
{
return allDatas->at(i).up;
}
else
{
return allDatas->at(i).down;
}
}
}
return string("");
}
void main(void)
{
vector<DataLine> AllDatas;
FILE *pFile = NULL;
string tmpStr("");
DataLine tmpData;
AllDatas .clear();
//要将此文本文件中中文全角字符:(冒号)替换为半角字符:(冒号)
//因为文件中一部分为全角字符,一部分为半角字符处理起来非常不爽(麻烦)
pFile = fopen("output.txt","rt");
while ( ! feof(pFile) )
{
GetLine(pFile,&tmpStr);
TranslateDataStruct(&tmpStr,&tmpData);
AllDatas.push_back(tmpData);
}
fclose(pFile);
int year = 0;
int month = 0;
int day = 0;
int IsQueryUp = false;
while ( 1 )
{
fflush(stdin);
printf("\n----------------------------------------\n");
printf("输入你想查询的年(输入0退出) = ");
scanf("%d",&year);
fflush(stdin);
if ( 0 == year ) return;
printf("输入你想查询的月(输入0退出) = ");
scanf("%d",&month);
fflush(stdin);
if ( 0 == month ) return;
printf("输入你想查询的日(输入0退出) = ");
scanf("%d",&day);
fflush(stdin);
if ( 0 == day ) return;
printf("输入想查询UP还是DOWN(1代表UP,0代表DOWN) = ");
scanf("%d",&IsQueryUp);
fflush(stdin);
string GotData = getUpOrDown(&AllDatas,year,month,day,IsQueryUp==0?false:true);
printf("获取到数据: %s\n----------------------------------------\n",GotData.c_str());
}
}
用c++如何读取一个txt文档里的坐标点信息.如x=12.25,y=123.35等坐标信息...
include <stdio.h> main(){ FILE *fp;fp=fopen("File_name.txt","r");if(NULL==fp){ printf("Open the file Failed!\\n");} else { printf("Open the file Succeed!\\n");} char ch;\/\/ch = fgetc(fp);while(ch!=EOF){ if ( 'x'==(ch=fgetc(fp))||'y'==(ch=fgetc(fp...
请问C++ 如何从txt文件中读取数据,然后保存在类的数组中?
要声明一个信息(学生)类的数组然后再读文件,读文件大概代码如下:ifstream File_read;while(!File_read.eof()){ File_read>>data[i].num>>data[i].name>>data[i].score;i++;} 数组data是的类型是信息类。自己试试。
编写一个C++程序,进行模式匹配要求如下 可以从一个txt文档中读取...
这个是VC6的,VS2008也差不多:打开VC6,新建工程->MFCAppWizard(exe),假设工程名为Abc->选择SingleDocument,在第4步里点击Advanced,在FileExtension里填上txt,在第6步里,把CAbcView的父类改为CEditView,点Finish即可。这样编译生成的程序已经是一个功能完整的文本编辑器了。
...某一txt文件里面?请给出详细代码(包括头文件)谢谢!
Func : 往文件流out中写入信息,格式为时间:: 内容 \/ void write(ostream &out, const CTime &t){ static int cnt = 0; \/\/ 当前记录条数 CString szTmp;\/\/ 在时间和内容之间插入一标识符::,起分隔作用,方便提取时间对应的内容 szTmp.Format("%s:: 于%s写入 第%i条记录", t.Format("...
在C++的文件读写中,怎么直接从“下一行”开始读取数据?
由于C++处理文件是以流方式处理,要从下一行开始读取,先要能够将文件内部指针移到下一行,可以通过getline处理。istream inf("text.txt", ios::in);char buf[1000]; \/\/ 申请足够放入一行数据的大小 inf.getline(buf, 1000);这时文件内部指针就移到下一行的开始了。
我用DEV-C++编译C代码为什么总是出错?
出的信息就是return的值 在这个程序中,是0 一般main函数都会返回0 以表示运行无误 按照你说的一闪而过 原因是这个程序已经运行完了 所以就关闭掉 1、建议你在生成exe的目录下新建一个txt文档 内容写上cmd \/\/这是用来使用CMD,也就是命令提示符用的 然后保存,改名为cmd.bat \/\/一定要改扩展名 ...
C++课程设计,要求编写<学生籍贯信息记录薄>,请高手帮忙做做._百度知 ...
C++课程设计,要求编写<学生籍贯信息记录薄>,请高手帮忙做做. 50 如题.编制一个学生籍贯信息记录薄,每个学生信息包括:学号,姓名,籍贯.具体功能:1.创建信息链表并以磁盘文件保存;2.读取磁盘文件并显示输出所有学生的籍贯信息;3.按学号或姓名查询其籍贯... 如题.编制一个学生籍贯信息记录薄,每个学生信息包括:学号...
0x00000000指令引用的0x00000000内存,该内存不能为read,怎么回事?
电脑未安装运行环境所导致的无法运行,解决方法:1、按下键盘上的WIN+R进入到“运行”菜单,然后在运行菜单中输入“CMD”进入到命令符窗口。2、当进入到在命令符窗口中后。3、输入下图的命令来修复当前系统损坏的运行环境DLL。4、重新安装环境包。4、修复完毕后,重启电脑,软件报错问题即可解决。
软件开发的一般流程是什么?_?
软件开发流程分为: 需求确认——概要设计——详细设计——编码——单元测试——集成测试——系统测试——维护 软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。软件分为系统软件和应用软件,并不只是包括可以在...
c\/c++怎样播放电影
其中dllname为activex控件文件名,建议在安装前拷贝到system文件夹下。参数有如下意义:\/u——反注册控件\/s——不管注册成功与否,均不显示提示框\/c——控制台输出\/i——跳过控件的选项进行安装(与注册不同)\/n——不注册控件,此选项必须与\/i选项一起使用执行该命令的方法:1、可以在“开始”--“运行”,调出运行...