64,682
社区成员
发帖
与我相关
我的任务
分享
//文本文件a.txt信息格式如下:
//$WFE,1000.0440,W,09000.0000,Y,X,X,AA6
//9980,0000043,0003440,040,040,040,002,023,030
//8000,0054500,0005640,050,040,040,030,003,030
//8596,0076700,0006340,300,450,023,230,300,030
//5678,0004556,0045600,600,400,050,034,030,300
//5665,4353000,0232434,340,034,045,320,030,200
// .
// .
// .
//$WFE,1000.0440,W,09000.0000,Y,X,X,AA6
//9980,0000043,0003440,040,040,040,002,023,030
//8000,0054500,0005640,050,040,040,030,003,030
//8596,0076700,0006340,300,450,023,230,300,030
//5678,0004556,0045600,600,400,050,034,030,300
//5665,4353000,0232434,340,034,045,320,030,200
//
//将数据以","分隔提取a1~a53个字符数组,并且输出到b.txt文件,
#include <string.h>
#include <stdio.h>
char a[53][20];
char ln[80];
char seps[] = ",\n";
char *token;
FILE *fa,*fb;
int i;
void main() {
fa=fopen("a.txt","r");
fb=fopen("b.txt","w");
i=0;
while (1) {
fgets(ln,80,fa);
if (feof(fa)) break;
token=strtok(ln,seps);
while (token!=NULL) {
strcpy(a[i],token);
if (i==52) {
fprintf(fb,"%s\n",a[i]);
i=0;
} else {
fprintf(fb,"%s,",a[i]);
i++;
}
token = strtok( NULL, seps );
}
}
fclose(fb);
fclose(fa);
}
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
#include<vector>
using namespace std;
typedef unsigned int Group ;
//将str中含rsch的字符换成dsch字符,并返回替换后的副本
string Replace(size_t ipos,string str,char rsch,char dsch);
//判断i是否在数组npos中
bool isPostive(int i,int npos[],size_t size);
//传递一个打开的文件流和组i,和npos数组,size记录npos长度
vector<string> getElems(ifstream& infile,Group i,int npos[],size_t size);
//打印svec中的信息
void PrintInfo(ostream& os,const vector<string>& svec);
//传递写入文件流,eachline_no设置每行元素个数,svec为写入源,seperate为元素间分隔符
void Write(ofstream& out,size_t eachline_no,const vector<string>& svec,char seperate=' ');
int main()
{
char *fileName="H:\\1.txt";//设置关联文件名
ifstream infile(fileName);
if(!infile.is_open()) cerr<<"open file error!"<<endl;
vector<string> svec;
Group group=1; //设置组//索引从1开始
int npos[]={1,2,4,8,10,22,13,16,17,19,20,29};//得到第一组 a1 a2 a4 //索引从1开始
svec=getElems(infile,group,npos,sizeof(npos)/sizeof(*npos));//得到信息
PrintInfo(cout,svec); //屏幕上打印信息
infile.close();
ofstream outfile("H:\\2.txt",ios::app);
if(!outfile.is_open()) cerr<<"open file error!"<<endl;
Write(outfile,9,svec,',');//写入文件
outfile.close();
return 0;
}
///////////////////////////////////////////////////////////////////
bool isPostive(int i,int npos[],size_t size) //判断i是否在数组npos中
{
int index=0;
while(index!=size){
if(i==*(npos+index)) return true;
index++;
}
return false;
}
string Replace(size_t ipos,string str,char rsch,char dsch)//将str中含rsch的字符换成dsch字符,并返回替换后的副本
{
while(ipos<str.length()){
if(str[ipos]==rsch) str[ipos]=dsch;
ipos++;
}
return str;
}
//i标志所在组,npos标注要返回该组那些元素 ,size标注npos数组长度
vector<string> getElems(ifstream& infile,Group i,int npos[],size_t size)//传递一个打开的文件流和组i,和npos数组,size记录npos长度
{
size_t index=0,line_no=i*6; //组与所在记事本所在行的转换
string temp,str;
size_t line=i-1;
vector<string> svec;
while(line&&getline(infile,temp)){//用文件流进行 行 读取,读取到第i行(找到组”基地址")
line--;
}
if(i==0) return svec; //组不正确,返回一个空string组(包含sstream头文件
line=6; //重新设置line用str读入一个组
while(line--&&getline(infile,temp)){
str+=" "+temp;
}
cout<<str<<endl;
str=Replace(0,str,',',' ');//将该组所有‘,’替换成‘ ’
stringstream strLine(str);//定义一个字符串流
index=0;
while(strLine>>str){
if(isPostive(++index,npos,size))//查看该计数出的字符串时候是想要得到的
svec.push_back(str); //svec加载
}
return svec;
}
void PrintInfo(ostream& os,const vector<string>& svec)
{
if(!svec.empty())
{
vector<string>::const_iterator con_it=svec.begin();
while(con_it!=svec.end())
os<<*con_it++<<" ";
}
cout<<endl;
}
void Write(ofstream& out,size_t eachline_no,const vector<string>& svec,char seperate)
{
if(!svec.empty()){
vector<string>::const_iterator con_it=svec.begin();
while(con_it!=svec.end()){
out<<*con_it++<<seperate;
if(--eachline_no) out<<'/n';//换行
}
out<<'/n';
}
}
vector<string> getElems(ifstream& infile,Group i,int npos[],size_t size){
size_t index=0,line_no=i*6; //组与所在记事本所在行的转换
string temp,str;
size_t line=i-1;
vector<string> svec;
while(line--&&getline(infile,temp)){//用文件流进行 行 读取,读取到第i行(找到组”基地址")
if(line=i) break;//终止
}
if(i==0) return svec; //组不正确,返回一个空string组(包含sstream头文件
line=6; //重新设置line用str读入一个组
while(line--&&getline(infile,temp)){
str+=" "+temp;
}
str=Replace(0,str,',',' ');//将该组所有‘,’替换成‘ ’
stringstream strLine(str);//定义一个字符串流
index=0;
while(strLine>>str){
if(isPostive(index++,npos,size))//查看该计数出的字符串时候是想要得到的
svec.push_back(str); //svec加载
}
return svec;
}
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
#include<vector>
using namespace std;
typedef unsigned int Group ;
//将str中含rsch的字符换成dsch字符,并返回替换后的副本
string Replace(size_t ipos,string str,char rsch,char dsch);
//判断i是否在数组npos中
bool isPostive(int i,int npos[],size_t size);
//传递一个打开的文件流和组i,和npos数组,size记录npos长度
vector<string> getElems(ifstream& infile,Group i,int npos[],size_t size);
//打印svec中的信息
void PrintInfo(ostream& os,const vector<string>& svec);
int main()
{
char *fileName="H:\\1.txt";//设置关联文件名
ifstream infile(fileName);
if(!infile.is_open()) cerr<<"open file error!"<<endl;
vector<string> svec;
Group group=1; //设置组
int npos[]={1,2,4};//得到第一组 a1 a2 a4 //索引从0开始
svec=getElems(infile,group,npos,sizeof(npos)/sizeof(*npos));//得到信息
PrintInfo(cout,svec); //打印信息
return 0;
}
bool isPostive(int i,int npos[],size_t size) //判断i是否在数组npos中
{
int index=0;
while(index!=size){
if(i==*(npos+index)) return true;
index++;
}
return false;
}
string Replace(size_t ipos,string str,char rsch,char dsch)//将str中含rsch的字符换成dsch字符,并返回替换后的副本
{
while(ipos<str.length()){
if(str[ipos]==rsch) str[ipos]=dsch;
ipos++;
}
return str;
}
//i标志所在组,npos标注要返回该组那些元素 ,size标注npos数组长度
vector<string> getElems(ifstream& infile,Group i,int npos[],size_t size)//传递一个打开的文件流和组i,和npos数组,size记录npos长度
{
size_t index=0,line_no=i*6; //组与所在记事本所在行的转换
string str;
size_t line=i;
vector<string> svec;
while(line--&&getline(infile,str)){//用文件流进行 行 读取,读取到第i行
if(line=i) break;//终止
}
if(i==0) return svec; //组不正确,返回一个空string组(包含sstream头文件
str=Replace(0,str,',',' ');//将‘,’替换成‘ ’
stringstream strLine(str);//定义一个字符串流
index=0;
while(strLine>>str){
if(isPostive(index++,npos,size))//查看该计数出的字符串时候是想要得到的
svec.push_back(str); //svec加载
}
return svec;
}
void PrintInfo(ostream& os,const vector<string>& svec)
{
if(!svec.empty())
{
vector<string>::const_iterator con_it=svec.begin();
while(con_it!=svec.end())
os<<*con_it++<<" ";
}
cout<<endl;
}
#include<fstream>
#include<sstream>
#include<string>
#include<vector>
#include<algorithm>
#include<limits>
using namespace std;
class Data;
istream &operator>>(istream& in,Data& d);
ostream &operator<<(ostream& o,const Data& d);
#define N 3
class Data{
int (&v)[N];
vector<string> svec;
public:
Data(int (&vec)[N]):v(vec){}
friend istream &operator>>(istream& in,Data& d);
friend ostream &operator<<(ostream& o,const Data& d);
};
istream &operator>>(istream& in,Data& d){
d.svec.clear();
string tmp,info;
for(int i=0;i<6;++i) {getline(in,tmp);info+=tmp+',';}
for(istringstream isstr(info);getline(isstr,tmp,',');)
d.svec.push_back(tmp);
return in;
}
ostream &operator<<(ostream& o,const Data& d){
for(int i=0;i<N;++i)
o<<d.svec[d.v[i]]<<' ';
return o;
}
int main(){
int s[N]={0,8,17};
Data d(s);
ifstream in("data.txt");
ofstream out("result.txt");
while(in>>d) out<<d<<endl;
}
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
//自定义操纵器决定输出换行还是','
inline ostream& Append(ostream& strm){
static cnt=0;
return strm<<((++cnt%6)?',':'\n');
}
int main(){
ifstream in("a.txt");
ofstream out("b.txt");
string tmp;
while(getline(in,tmp)){
out<<tmp<<Append;
}
}