C++對文本里面的大量數據進行排序(shell,c++,fopen,awk,sed)

xwfw 9年前發布 | 931 次閱讀 C/C++

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


 本文由用戶 xwfw 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!