• <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 楊粼波 閱讀(2319) 評論(1)  編輯 收藏 引用

            評論

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

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

            色综合久久综精品| 久久久久久久综合综合狠狠| 久久久久国产一区二区| 国产激情久久久久久熟女老人| 亚洲国产精品18久久久久久| 99国产精品久久| 久久午夜无码鲁丝片秋霞| 久久久久久久99精品免费观看| 久久天天躁狠狠躁夜夜avapp| A狠狠久久蜜臀婷色中文网| 亚洲伊人久久综合中文成人网| 久久丫精品国产亚洲av不卡| 国内精品伊人久久久影院| 精品国产91久久久久久久a| 久久成人国产精品二三区| 久久66热人妻偷产精品9| 久久久久人妻一区精品色| 久久午夜夜伦鲁鲁片免费无码影视 | 欧美日韩中文字幕久久伊人| 无码AV中文字幕久久专区| 亚洲AV无码一区东京热久久| 亚洲欧美久久久久9999| 亚洲精品乱码久久久久久按摩| 久久精品人妻中文系列| 欧美大香线蕉线伊人久久| 99久久免费国产特黄| 久久精品国产亚洲av瑜伽| 三上悠亚久久精品| 久久亚洲精精品中文字幕| 久久国产视屏| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久久久亚洲精品无码蜜桃| 99热成人精品热久久669| 国产L精品国产亚洲区久久| 精品蜜臀久久久久99网站| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 人妻丰满AV无码久久不卡| 国产综合久久久久| 久久久无码精品亚洲日韩京东传媒 | 久久久久国产精品麻豆AR影院| 久久久久亚洲AV无码去区首|