• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            兩個 CSV 解析類

            其一:
            /* Copyright (C) 1999 Lucent Technologies */
            /* Excerpted from 'The Practice of Programming' */
            /* by Brian W. Kernighan and Rob Pike */

            #include 
            <iostream>
            #include 
            <algorithm>
            #include 
            <string>
            #include 
            <vector>

            using namespace std;

            class Csv
            {    // read and parse comma-separated values
                
            // sample input: "LU",86.25,"11/4/1998","2:19PM",+4.0625

            public:
                Csv(istream
            & fin = cin, string sep = ",") : 
                  fin(fin), fieldsep(sep) 
            {}

                  
            int getline(string&);
                  
            string getfield(int n);
                  
            int getnfield() const return nfield; }

            private:
                istream
            & fin;            // input file pointer
                string line;            // input line
                vector<string> field;    // field strings
                int nfield;                // number of fields
                string fieldsep;        // separator characters

                
            int split();
                
            int endofline(char);
                
            int advplain(const string& line, string& fld, int);
                
            int advquoted(const string& line, string& fld, int);
            }
            ;

            // endofline: check for and consume \r, \n, \r\n, or EOF
            int Csv::endofline(char c)
            {
                
            int eol;

                eol 
            = (c=='\r' || c=='\n');
                
            if (c == '\r')
                
            {
                    fin.
            get(c);
                    
            if (!fin.eof() && c != '\n')
                        fin.putback(c);    
            // read too far
                }

                
            return eol;
            }


            // getline: get one line, grow as needed
            int Csv::getline(string& str)
            {    
                
            char c;

                
            for (line = ""; fin.get(c) && !endofline(c); )
                    line 
            += c;
                split();
                str 
            = line;
                
            return !fin.eof();
            }


            // split: split line into fields
            int Csv::split()
            {
                
            string fld;
                
            int i, j;

                nfield 
            = 0;
                
            if (line.length() == 0)
                    
            return 0;
                i 
            = 0;

                
            do {
                    
            if (i < line.length() && line[i] == '"')
                        j 
            = advquoted(line, fld, ++i);    // skip quote
                    else
                        j 
            = advplain(line, fld, i);
                    
            if (nfield >= field.size())
                        field.push_back(fld);
                    
            else
                        field[nfield] 
            = fld;
                    nfield
            ++;
                    i 
            = j + 1;
                }
             while (j < line.length());

                
            return nfield;
            }


            // advquoted: quoted field; return index of next separator
            int Csv::advquoted(const string& s, string& fld, int i)
            {
                
            int j;

                fld 
            = "";
                
            for (j = i; j < s.length(); j++)
                
            {
                    
            if (s[j] == '"' && s[++j] != '"')
                    
            {
                        
            int k = s.find_first_of(fieldsep, j);
                        
            if (k > s.length())    // no separator found
                            k = s.length();
                        
            for (k -= j; k-- > 0; )
                            fld 
            += s[j++];
                        
            break;
                    }

                    fld 
            += s[j];
                }

                
            return j;
            }


            // advplain: unquoted field; return index of next separator
            int Csv::advplain(const string& s, string& fld, int i)
            {
                
            int j;

                j 
            = s.find_first_of(fieldsep, i); // look for separator
                if (j > s.length())               // none found
                    j = s.length();
                fld 
            = string(s, i, j-i);
                
            return j;
            }



            // getfield: return n-th field
            string Csv::getfield(int n)
            {
                
            if (n < 0 || n >= nfield)
                    
            return "";
                
            else
                    
            return field[n];
            }


            // Csvtest main: test Csv class
            int main(void)
            {
                
            string line;
                Csv csv;

                
            while (csv.getline(line) != 0)
                
            {
                    cout 
            << "line = `" << line <<"'\n";
                    
            for (int i = 0; i < csv.getnfield(); i++)
                        cout 
            << "field[" << i << "] = `"
                        
            << csv.getfield(i) << "'\n";
                }

                
            return 0;
            }




            其二:
            來源于:http://www.mayukhbose.com/freebies/c-code.php
            頭文件:
            #ifndef __CSVPARSE_H_2001_06_07__
            #define __CSVPARSE_H_2001_06_07__

            /*
            Copyright (c) 2001, Mayukh Bose
            All rights reserved.

            Redistribution and use in source and binary forms, with or without
            modification, are permitted provided that the following conditions are
            met:

            * Redistributions of source code must retain the above copyright notice,
            this list of conditions and the following disclaimer.  

            * Redistributions in binary form must reproduce the above copyright
            notice, this list of conditions and the following disclaimer in the
            documentation and/or other materials provided with the distribution.

            * Neither the name of Mayukh Bose nor the names of other
            contributors may be used to endorse or promote products derived from
            this software without specific prior written permission.

            THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
            "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
            */


            #include 
            <string>
            using namespace std;

            class CSVParser {
             
            private:
              
            string m_sData;
              
            string::size_type m_nPos;
              
            void SkipSpaces(void);
             
            public:
              CSVParser();
              
            const CSVParser & operator << (const string &sIn);
              
            const CSVParser & operator << (const char *sIn);
              CSVParser 
            & operator >> (int &nOut);
              CSVParser 
            & operator >> (double &nOut);
              CSVParser 
            & operator >> (string &sOut);
            }
            ;

            #endif

            cpp
            /*
            Copyright (c) 2001, Mayukh Bose
            All rights reserved.

            Redistribution and use in source and binary forms, with or without
            modification, are permitted provided that the following conditions are
            met:

            * Redistributions of source code must retain the above copyright notice,
            this list of conditions and the following disclaimer.  

            * Redistributions in binary form must reproduce the above copyright
            notice, this list of conditions and the following disclaimer in the
            documentation and/or other materials provided with the distribution.

            * Neither the name of Mayukh Bose nor the names of other
            contributors may be used to endorse or promote products derived from
            this software without specific prior written permission.

            THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
            "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
            */


            #include 
            <iostream>
            #include 
            <cstdlib>
            #include 
            "csvparser.h"
            using namespace std;


            CSVParser::CSVParser()
            {
              m_sData 
            = "";
              m_nPos 
            = 0;
            }


            void CSVParser::SkipSpaces(void)
            {
              
            while (m_nPos < m_sData.length() && m_sData[m_nPos] == ' ')
                m_nPos
            ++;
            }


            const CSVParser & CSVParser::operator <<(const string & sIn)
            {
              
            this->m_sData = sIn;
              
            this->m_nPos = 0;
              
            return *this;
            }


            const CSVParser & CSVParser::operator <<(const char *sIn)
            {
              
            this->m_sData = sIn;
              
            this->m_nPos = 0;
              
            return *this;
            }


            CSVParser 
            & CSVParser::operator >>(int & nOut)
            {
              
            string sTmp = "";
              SkipSpaces();
              
            while (m_nPos < m_sData.length() && m_sData[m_nPos] != ',')
                sTmp 
            += m_sData[m_nPos++];

              m_nPos
            ++// skip past comma
              nOut = atoi(sTmp.c_str());
              
            return *this;
            }


            CSVParser 
            & CSVParser::operator >>(double & nOut)
            {
              
            string sTmp = "";
              SkipSpaces();
              
            while (m_nPos < m_sData.length() && m_sData[m_nPos] != ',')
                sTmp 
            += m_sData[m_nPos++];

              m_nPos
            ++// skip past comma
              nOut = atof(sTmp.c_str());
              
            return *this;
            }


            CSVParser 
            & CSVParser::operator >>(string & sOut)
            {
              
            bool bQuotes = false;
              sOut 
            = "";
              SkipSpaces();

              
            // Jump past first " if necessary
              if (m_nPos < m_sData.length() && m_sData[m_nPos] == '"'{
                bQuotes 
            = true;
                m_nPos
            ++
              }

              
              
            while (m_nPos < m_sData.length()) {
                
            if (!bQuotes && m_sData[m_nPos] == ',')
                  
            break;
                
            if (bQuotes && m_sData[m_nPos] == '"'{
                  
            if (m_nPos + 1 >= m_sData.length() - 1)
                    
            break;
                  
            if (m_sData[m_nPos+1== ',')
                    
            break;
                }

                sOut 
            += m_sData[m_nPos++];
              }


              
            // Jump past last " if necessary
              if (bQuotes && m_nPos < m_sData.length() && m_sData[m_nPos] == '"')
                m_nPos
            ++

              
            // Jump past , if necessary
              if (m_nPos < m_sData.length() && m_sData[m_nPos] == ',')
                m_nPos
            ++

              
            return *this;
            }



            posted on 2008-06-03 11:26 楊粼波 閱讀(2317) 評論(1)  編輯 收藏 引用

            評論

            # re: 兩個 CSV 解析類 2008-10-16 09:49 傲天

            這片文章不錯,我喜歡,謝謝博主  回復  更多評論   

            2021少妇久久久久久久久久| 久久99国产综合精品| 久久这里只有精品视频99| 94久久国产乱子伦精品免费| 93精91精品国产综合久久香蕉 | 思思久久好好热精品国产| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 国产美女亚洲精品久久久综合| 久久天天躁狠狠躁夜夜不卡 | 久久香综合精品久久伊人| 精品无码久久久久久午夜| 91久久香蕉国产熟女线看| 亚洲午夜精品久久久久久app| 久久婷婷是五月综合色狠狠| 色欲综合久久中文字幕网| 人人狠狠综合久久亚洲88| 久久久久人妻一区精品| 香蕉久久av一区二区三区| 久久精品国产精品青草| 欧洲国产伦久久久久久久| 久久久国产精品亚洲一区| 国产99久久久久久免费看| 国产精品久久久久久五月尺| 久久777国产线看观看精品| 免费精品久久久久久中文字幕| 精品人妻伦九区久久AAA片69| 久久不射电影网| 狠狠精品久久久无码中文字幕| AV色综合久久天堂AV色综合在| 久久久久人妻精品一区三寸蜜桃| 久久国产精品成人影院| 一本久久精品一区二区| 国产三级观看久久| 91视频国产91久久久| 亚洲日本久久久午夜精品| 久久婷婷综合中文字幕| 久久er热视频在这里精品| 中文字幕无码精品亚洲资源网久久| 久久乐国产综合亚洲精品| 久久免费香蕉视频| 美女久久久久久|