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

牽著老婆滿街逛

嚴(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>
            亚洲美女精品久久| 欧美高清视频在线| 国产精品白丝jk黑袜喷水| 亚洲欧洲日本一区二区三区| 免费视频亚洲| 欧美激情精品久久久| 亚洲小少妇裸体bbw| 亚洲午夜精品久久| 国产一区二区三区免费不卡| 久久免费视频观看| 欧美电影在线观看完整版| 99国产精品| 性欧美xxxx大乳国产app| 好吊日精品视频| 亚洲人成网站精品片在线观看| 欧美激情1区2区| 亚洲欧美日韩精品久久奇米色影视 | 国产精品久久福利| 欧美在线视频观看免费网站| 久久综合国产精品| 亚洲一区二区欧美| 久久精品一区二区三区中文字幕| 亚洲精品乱码久久久久久久久 | 久久影院午夜论| 欧美1级日本1级| 亚洲免费视频网站| 久久这里只有| 欧美一区二区三区免费在线看| 久久久久国色av免费观看性色| 一区二区欧美在线| 久久久精品国产免大香伊| 一区二区三区欧美日韩| 久久精品视频免费观看| 亚洲女性喷水在线观看一区| 老司机免费视频一区二区三区| 亚洲女ⅴideoshd黑人| 免费成人av在线看| 久久蜜桃精品| 国产精品一区二区你懂得| 亚洲精品五月天| 亚洲高清在线视频| 欧美一区二视频| 午夜精品久久久99热福利| 欧美成人久久| 欧美顶级少妇做爰| 国产一区观看| 亚洲欧美日韩一区二区在线| 一本色道婷婷久久欧美| 麻豆精品在线播放| 免费成人av资源网| 黑丝一区二区| 欧美一区中文字幕| 欧美在线日韩在线| 国产精品任我爽爆在线播放| 亚洲日本在线观看| 日韩视频在线观看国产| 米奇777超碰欧美日韩亚洲| 久热综合在线亚洲精品| 国产综合自拍| 久久精品国产亚洲a| 欧美一区二区视频在线观看| 国产精品久久久久久超碰| 一本到12不卡视频在线dvd| 亚洲最新视频在线| 欧美日韩国产成人在线免费| 亚洲国产日韩欧美| av成人老司机| 欧美伦理影院| 亚洲另类黄色| 亚洲先锋成人| 国产欧美在线观看一区| 欧美一级理论性理论a| 欧美在线二区| 国产专区一区| 噜噜噜91成人网| 亚洲国产视频一区| 一区二区电影免费观看| 欧美日韩在线视频一区二区| 亚洲无吗在线| 久久精品国产亚洲精品| 黄色免费成人| 欧美激情综合网| 亚洲一区二区三区四区视频| 久久不射2019中文字幕| 影音先锋亚洲一区| 欧美精品在线观看播放| 亚洲视频一区在线| 久久久欧美精品sm网站| 91久久夜色精品国产九色| 欧美三级视频在线| 欧美在线关看| 亚洲人成网站999久久久综合| 亚洲自拍都市欧美小说| 国产一区二区三区av电影| 蜜桃久久av一区| 宅男噜噜噜66一区二区66| 久久米奇亚洲| 亚洲午夜视频在线观看| 好看的亚洲午夜视频在线| 女人色偷偷aa久久天堂| 亚洲在线一区二区| 亚洲大胆视频| 欧美在线亚洲综合一区| 亚洲精品国产欧美| 国产亚洲一区二区三区| 欧美精品在线免费| 久久精品国产一区二区三| 亚洲欧洲一区二区三区在线观看| 午夜日韩电影| 日韩网站在线看片你懂的| 国产亚洲一区二区三区在线播放| 欧美巨乳波霸| 久久全球大尺度高清视频| 亚洲一区二区三| 亚洲人成在线观看网站高清| 久久免费视频一区| 午夜国产精品视频| 一本色道久久综合一区| 亚洲成在人线av| 国产九色精品成人porny| 欧美美女喷水视频| 美女图片一区二区| 午夜精品久久久久久99热软件 | 噜噜噜久久亚洲精品国产品小说| 亚洲综合日本| 中文网丁香综合网| 亚洲精品一级| 亚洲欧洲日本一区二区三区| 影音先锋成人资源站| 国产情人综合久久777777| 国产精品成人国产乱一区| 欧美激情一区在线| 欧美69视频| 免费久久99精品国产| 久久久久久尹人网香蕉| 久久福利毛片| 久久精品亚洲一区二区| 久久av红桃一区二区小说| 亚洲欧美视频在线| 午夜精品久久久久久久| 亚洲在线免费视频| 亚洲欧美日韩一区二区在线| 亚洲一区二区三区四区中文 | 一道本一区二区| 日韩视频永久免费| 一区二区三区四区五区精品视频| 亚洲精品欧洲| 一区二区三区蜜桃网| 国产精品99久久久久久久女警| 亚洲网站在线| 欧美一级久久久久久久大片| 欧美中文在线观看国产| 久久久久中文| 欧美激情影音先锋| 欧美特黄a级高清免费大片a级| 欧美性大战久久久久久久| 国产精品久久久久久妇女6080 | 国产美女扒开尿口久久久| 国产欧美一区二区精品婷婷| 国语自产偷拍精品视频偷| 精品福利av| 亚洲乱码国产乱码精品精天堂| 正在播放日韩| 欧美在线一级视频| 蜜桃久久av| 日韩视频免费看| 午夜电影亚洲| 蜜臀99久久精品久久久久久软件| 欧美日本免费一区二区三区| 国产精品久99| 在线激情影院一区| 亚洲网站在线观看| 久久综合九色九九| 日韩视频免费大全中文字幕| 午夜精品在线| 欧美激情麻豆| 国产一区二区三区精品欧美日韩一区二区三区| 韩国av一区二区三区四区| 亚洲免费观看高清完整版在线观看熊| 亚洲天堂av高清| 毛片一区二区三区| 一本色道久久综合亚洲精品婷婷 | 欧美sm极限捆绑bd| 国产精品第三页| 最新高清无码专区| 欧美在线观看一区二区| 亚洲韩国日本中文字幕| 午夜亚洲视频| 欧美日韩亚洲一区二区三区四区 | 欧美视频在线一区| 亚洲第一久久影院| 欧美一区二区免费| 99精品久久| 欧美大胆成人| 一区二区在线视频观看| 欧美亚洲三区| 亚洲午夜一区| 欧美日韩国产在线播放网站| 亚洲激情综合| 狂野欧美性猛交xxxx巴西|