青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

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

兩個(gè) 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 楊粼波 閱讀(2322) 評(píng)論(1)  編輯 收藏 引用

評(píng)論

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

這片文章不錯(cuò),我喜歡,謝謝博主  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            午夜国产不卡在线观看视频| 亚洲性夜色噜噜噜7777| 久久久国产精彩视频美女艺术照福利| 一区二区三区国产在线| 亚洲九九爱视频| 亚洲午夜精品网| 午夜精品视频在线观看| 久久精品国产亚洲精品 | 亚洲一线二线三线久久久| 亚洲一区二区欧美| 久久精视频免费在线久久完整在线看| 久久九九全国免费精品观看| 欧美成人精品| 欧美色中文字幕| 欧美激情国产精品| 亚洲精品孕妇| 亚洲女人天堂成人av在线| 久久精品国产99国产精品| 欧美成人免费在线观看| 欧美视频在线观看 亚洲欧| 国产亚洲欧美日韩精品| 最新国产拍偷乱拍精品 | 欧美国内亚洲| 亚洲视频在线播放| 麻豆乱码国产一区二区三区| 国产精品www.| 激情自拍一区| 中国女人久久久| 久久久之久亚州精品露出| 亚洲精品一区二区在线| 久久精品国产精品亚洲精品| 欧美日韩精品一区二区天天拍小说 | 蜜桃视频一区| 99国产一区| 免费观看日韩av| 国产亚洲一级| 亚洲制服欧美中文字幕中文字幕| 蜜桃av噜噜一区| 亚洲男人第一网站| 欧美猛交免费看| 在线欧美小视频| 久久久久久久一区| 亚洲午夜在线观看| 欧美精品麻豆| 亚洲三级性片| 欧美成人午夜77777| 欧美一区二区成人6969| 国产精品国产亚洲精品看不卡15 | 免费欧美网站| 午夜日韩在线观看| 国产精品午夜电影| 亚洲欧美成人一区二区在线电影| 亚洲国产日韩美| 欧美专区亚洲专区| 国产农村妇女精品| 久久成人人人人精品欧| 亚洲免费视频中文字幕| 国产精品青草久久| 性色av一区二区三区红粉影视| 日韩亚洲欧美在线观看| 欧美激情综合亚洲一二区| 亚洲美女网站| 亚洲精品综合久久中文字幕| 欧美福利在线| 欧美久久电影| 亚洲精品一区二区网址| 可以免费看不卡的av网站| 欧美在线观看www| 伊人成年综合电影网| 免费观看成人鲁鲁鲁鲁鲁视频| 久久久av水蜜桃| 亚洲国产精品va| 亚洲欧洲在线一区| 欧美日韩中文字幕综合视频| 亚洲综合视频在线| 欧美一区二区在线看| 韩国v欧美v日本v亚洲v| 欧美大片免费观看在线观看网站推荐| 久久久久久亚洲精品杨幂换脸 | 久久人人97超碰精品888| 亚洲国产高清在线观看视频| 91久久国产综合久久91精品网站| 欧美日韩亚洲综合| 欧美淫片网站| 欧美成人a视频| 亚洲深夜福利网站| 午夜久久资源| 亚洲精品乱码久久久久久| 99在线精品视频| 国产亚洲一区二区精品| 欧美黄色成人网| 国产精品久久久久久模特| 久久久噜噜噜久久久| 欧美理论电影在线观看| 久久精品亚洲一区二区| 欧美激情一区在线| 久久久国产午夜精品| 欧美成人午夜| 久久经典综合| 欧美日韩一区二区三区在线| 欧美chengren| 国产欧美韩日| 日韩一级黄色大片| 亚洲电影观看| 欧美亚洲一区| 亚洲深夜激情| 欧美国产第一页| 狂野欧美性猛交xxxx巴西| 欧美视频一区二区三区在线观看| 久久综合伊人77777蜜臀| 国产精品极品美女粉嫩高清在线 | 久久亚洲国产精品日日av夜夜| 亚洲尤物精选| 欧美紧缚bdsm在线视频| 老色批av在线精品| 国产精品一区二区久激情瑜伽| 亚洲黄一区二区三区| 黄色日韩精品| 午夜久久tv| 西西裸体人体做爰大胆久久久| 欧美国产免费| 欧美国产日本在线| 精品成人国产| 久久精品国产亚洲高清剧情介绍| 国产精品第一页第二页第三页| 欧美高清视频一区| 激情视频一区二区三区| 亚洲欧美bt| 先锋资源久久| 国产精品免费看久久久香蕉| 一本色道久久99精品综合| 一本色道精品久久一区二区三区| 欧美风情在线| 亚洲国产成人在线播放| 亚洲日本va午夜在线影院| 欧美chengren| 亚洲经典一区| 一区二区精品| 欧美日韩国产在线| 亚洲美女在线视频| 一区二区三区国产在线| 欧美日本精品| 亚洲性图久久| 久久久久久亚洲精品杨幂换脸 | 亚洲视频专区在线| 欧美一区二区三区在线| 国产一级一区二区| 久久综合九色综合久99| 亚洲国产成人久久| 一本色道久久综合亚洲91| 国产精品99免费看 | 亚洲美女视频| 欧美性猛交xxxx乱大交蜜桃| 亚洲亚洲精品在线观看 | 亚洲综合色噜噜狠狠| 欧美一区免费| 激情久久综合| 欧美激情一区二区三级高清视频| 亚洲乱码国产乱码精品精| 欧美亚洲免费电影| 尤物99国产成人精品视频| 欧美激情小视频| 午夜精品国产精品大乳美女| 另类亚洲自拍| 亚洲一区bb| 影音先锋久久资源网| 欧美日韩国产页| 欧美一区二区三区四区视频 | 久久riav二区三区| 亚洲高清久久| 香蕉久久久久久久av网站| 在线精品视频一区二区三四| 欧美精品精品一区| 欧美一进一出视频| 亚洲黄色成人| 久久久91精品国产| 一区二区三区免费网站| 伊人久久大香线蕉av超碰演员| 欧美日韩亚洲一区二区三区在线| 欧美在线影院| av成人国产| 亚洲电影中文字幕| 久久国产视频网| 中文国产成人精品| 亚洲国产99| 国产日韩综合| 欧美日韩人人澡狠狠躁视频| 久久嫩草精品久久久精品一| 亚洲在线视频免费观看| 亚洲国产毛片完整版| 国产免费亚洲高清| 欧美色欧美亚洲另类七区| 久久一区国产| 久久精品30| 午夜在线视频观看日韩17c| 一区二区三区av| 亚洲精品小视频在线观看| 欧美国产视频一区二区| 老牛国产精品一区的观看方式| 午夜欧美精品久久久久久久|