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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(2332) 評論(1)  編輯 收藏 引用

評論

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

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


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            亚洲精品国产系列| 国产精品乱人伦中文| 亚洲欧美清纯在线制服| 欧美激情精品久久久久久免费印度| 亚洲视频网在线直播| 精品动漫3d一区二区三区| 国产精品久久久一区二区| 免费看av成人| 久久久久九九九| 亚洲综合三区| 这里只有精品视频| 亚洲欧洲精品一区二区三区波多野1战4 | 国产日韩欧美一二三区| 欧美日韩亚洲另类| 欧美成人免费全部| 老司机成人在线视频| 欧美一进一出视频| 亚洲女女女同性video| 一区二区三区三区在线| 亚洲人成网站777色婷婷| 亚洲高清久久久| 免费欧美网站| 裸体丰满少妇做受久久99精品| 欧美一区二区久久久| 亚洲欧美国产精品va在线观看| 一本色道久久综合亚洲二区三区| 亚洲国产精品一区制服丝袜| 一区三区视频| 在线观看欧美精品| 亚洲高清色综合| 激情欧美日韩| 在线播放不卡| 91久久中文| 亚洲破处大片| 一区二区三区精品久久久| 亚洲乱码视频| 一本一本a久久| 在线亚洲一区观看| 亚洲视频一区二区在线观看| 中文精品在线| 亚洲欧美一区二区精品久久久| 亚洲一区精品在线| 欧美一级视频| 国内精品久久久久久影视8 | 麻豆精品在线视频| 免费在线日韩av| 欧美激情在线免费观看| 亚洲国产黄色片| 亚洲肉体裸体xxxx137| 日韩小视频在线观看专区| 一区二区冒白浆视频| 亚洲欧美国产高清va在线播| 久久gogo国模裸体人体| 久久婷婷影院| 欧美日本高清一区| 国产精品麻豆成人av电影艾秋| 国产欧美精品一区二区色综合| 国产午夜精品麻豆| 亚洲国产成人精品女人久久久 | 亚洲国产导航| 99视频在线观看一区三区| 亚洲一区二区三区四区在线观看 | 日韩一区二区精品视频| 亚洲女爱视频在线| 久久久久久网址| 欧美阿v一级看视频| 亚洲九九精品| 欧美一区二区三区播放老司机| 乱码第一页成人| 欧美午夜久久久| 精品成人久久| 一区二区三区久久久| 欧美一区二区三区视频在线| 美女日韩在线中文字幕| 亚洲精品一区久久久久久| 午夜精品久久久久久久白皮肤| 模特精品在线| 国产精品亚洲综合天堂夜夜| 亚洲电影第三页| 亚洲一区二区成人| 久久综合一区| 一区二区三区日韩欧美| 噜噜噜噜噜久久久久久91| 国产精品影音先锋| 亚洲另类视频| 久久久av网站| 一区二区高清在线观看| 久久久五月天| 亚洲欧美资源在线| 欧美喷潮久久久xxxxx| 国产曰批免费观看久久久| 亚洲美女av黄| 美国十次了思思久久精品导航| 这里只有视频精品| 亚洲人成啪啪网站| 久久久精品一品道一区| 国产精品久久久久9999| 亚洲精品日韩在线| 久久综合狠狠| 亚洲一区二区黄| 欧美精品日韩综合在线| 久久精品99无色码中文字幕| 精品999久久久| 欧美综合国产| 一区二区三区久久久| 欧美大片一区二区| 在线成人h网| 久久青青草原一区二区| 亚洲无人区一区| 欧美日韩大片| 99国产一区二区三精品乱码| 欧美/亚洲一区| 久久成人国产| 国内精品美女在线观看| 欧美一级电影久久| 亚洲午夜一区二区| 欧美三级乱人伦电影| 亚洲另类一区二区| 亚洲国产综合在线看不卡| 久久露脸国产精品| 国产一区二区三区久久悠悠色av | 亚洲国产婷婷香蕉久久久久久99| 久久精品国产2020观看福利| 亚洲性夜色噜噜噜7777| 国产精品高清在线观看| 亚洲色无码播放| 日韩亚洲视频在线| 欧美日韩激情小视频| 日韩一二三在线视频播| 亚洲人成久久| 欧美日韩国产在线看| 一区二区激情小说| 夜夜精品视频一区二区| 欧美系列亚洲系列| 午夜精品美女久久久久av福利| 亚洲天堂偷拍| 国产精品一区视频网站| 久久精品视频在线看| 久久精品30| 在线观看日韩av电影| 欧美成人精品不卡视频在线观看| 久久综合久久久久88| 亚洲欧洲视频在线| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美激情一区二区三区在线| 欧美3dxxxxhd| 99精品热视频只有精品10| 亚洲精品美女久久7777777| 欧美日韩麻豆| 午夜欧美精品久久久久久久| 亚洲综合色在线| 国内精品国产成人| 欧美大成色www永久网站婷| 欧美国产精品人人做人人爱| 中文久久乱码一区二区| 亚洲主播在线观看| 狠狠色伊人亚洲综合成人| 欧美阿v一级看视频| 日韩一区二区精品视频| 国产女人精品视频| 欧美不卡视频| 欧美日韩在线不卡一区| 久久成人免费网| 久久一区中文字幕| 亚洲人午夜精品免费| 中文精品视频一区二区在线观看| 国产婷婷色一区二区三区| 欧美本精品男人aⅴ天堂| 欧美色道久久88综合亚洲精品| 欧美影院在线播放| 免费观看国产成人| 在线亚洲成人| 久久国产精品亚洲va麻豆| 9l视频自拍蝌蚪9l视频成人 | 欧美精品91| 午夜在线成人av| 另类欧美日韩国产在线| 亚洲新中文字幕| 欧美1区2区视频| 欧美视频一区二区| 老色鬼精品视频在线观看播放| 欧美精品首页| 久久久久久69| 国产精品xvideos88| 久久亚裔精品欧美| 欧美日韩在线一区| 免费成年人欧美视频| 国产精品大全| 亚洲电影成人| 国模叶桐国产精品一区| 亚洲免费观看在线观看| 一区二区三区在线观看视频| 一区二区三区 在线观看视频| 欲色影视综合吧| 亚洲欧美国产精品桃花| 亚洲视频一二区| 蜜臀a∨国产成人精品 | 亚洲精品中文字幕在线观看| 国内外成人免费激情在线视频网站 | 欧美a级一区|