C++对文本里面的大量数据进行排序(shell,c++,fopen,awk,sed)
2018-07-20 来源:open-open
#/bin/bash #对文本里面的数据进行排序 awk 'BEGIN{ RS="," } {print $0} END{ }'<a | sort -n | sed '/^$/ d' | awk 'BEGIN{ RS="\n";ORS="," } {print $0} END{ }'|sed 's/,$//g' 下面是c++版本的。 ---------------------------------------------------------------------- #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; template<int _N> class Bitset { public: Bitset() { _Tidy();//调用_Tidy()函数会初始化所有位为0. } void Show()//显示01位. { for(int _I=0;_I<_N;_I++) { cout<<(test(_I)?'1':'0'); } } bool test(int _P)//测试该位置是否为真(1). { int _I = _P/32; return (A[_I]>>(_P%32))&0x1; } void _Tidy() { for(int _I=0;_I<_W;_I++) { A[_I] = 0; } } void set(int _P)//将_p下标设置为1. { int _I = _P/32; A[_I] |= (0x1<<(_P%32)); } void printf() { for(int _I=0;_I<_N;_I++) { test(_I) && (cout<<_I<<" "); } }//打印排列结果. private: typedef long LONG;//以long的4个字节为一个单位数组. enum{_Nw=(_N-1)/(sizeof(LONG)*8), _W=_Nw+1}; int A[_W]; }; template<int _N> void deal_what(int &sum,char c,Bitset<_N> &a,FILE *&out) { if(c!=' ' && c!=',' && c!='\n') { sum=(sum*10+(c-'0')); return ; } else{ a.set(sum);//将数据设置到指定位中。 } sum = 0; } template<int _N> void get_result(Bitset<_N> &a,FILE *&out) { int sum = 0; while(1) { char c = fgetc(out); if(c==EOF) { return; } deal_what<_N>(sum,c,a,out); } } int get_value(int x,int &n)//求数字位数 { x && (n=get_value(x/10,n)+1); return n; } template<int _N> void in_put(Bitset<_N> &a,FILE *&in)//往文件b里面写入结果。 { for(int _I=0;_I<_N;_I++) { if(a.test(_I)) { int _H=_I; int _K = 0; get_value(_H,_K); int flog = _K; int save=0; while(1) { int sum=1; for(int _J=_K;_J>0;_J--) { sum*=10; } char c = ((_H-save*sum)/(sum/10))+'0'; save = _H/(sum/10); fputc(c,in) ; flog--; _K--; if(flog==0) break; } fputc(' ',in); } } } int main() { FILE *out = fopen("a","a+"); FILE *in = fopen("b","a+"); Bitset<100> a; get_result(a,out); in_put(a,in); fclose(out); fclose(in); }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
最新资讯
热门推荐