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

牽著老婆滿街逛

嚴(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>
            亚洲高清一二三区| 欧美专区日韩专区| 一区二区三区色| 国产精品视频一二| 久久在线播放| 亚洲免费视频一区二区| 欧美成人一区在线| 欧美性做爰毛片| 国产欧美日韩视频| 欧美激情欧美激情在线五月| 欧美在线视频a| 亚洲一区中文| 日韩一级视频免费观看在线| 在线视频欧美日韩精品| 欧美激情网友自拍| 免费精品视频| 欧美阿v一级看视频| 久久蜜桃香蕉精品一区二区三区| 亚洲欧美日韩精品久久| 亚洲午夜久久久久久久久电影网| 亚洲激情婷婷| 国产综合色产| 国产偷久久久精品专区| 久久精品五月婷婷| 久久久久久久网| 国产欧美一区二区精品性 | 午夜精品久久久久久| 亚洲欧美中文在线视频| 蜜桃视频一区| 国产手机视频一区二区| 亚洲精品欧美在线| 久久精品网址| 亚洲午夜免费福利视频| 欧美1区2区| 国产日韩精品一区| 日韩午夜在线电影| 久久综合久久综合久久综合| 一区二区成人精品 | 亚洲国产精品va在线看黑人| 亚洲图片欧美一区| 国产精品女主播| 免播放器亚洲| 韩国欧美国产1区| 欧美在线三级| 一本色道婷婷久久欧美| 欧美伦理视频网站| 最新国产拍偷乱拍精品| 免费观看在线综合| 久久精品国产欧美激情| 国产精品女主播一区二区三区| 亚洲美女在线观看| 亚洲高清123| 久久精品一区二区| 国产日本亚洲高清| 欧美一区二区三区电影在线观看| 亚洲精品中文字| 欧美伦理在线观看| 99在线精品免费视频九九视| 亚洲电影专区| 欧美电影在线观看完整版| 亚洲精品一区二区在线观看| 亚洲高清一区二区三区| 欧美阿v一级看视频| 亚洲激情婷婷| 亚洲精品护士| 欧美午夜女人视频在线| 一区二区三区四区国产精品| 亚洲高清中文字幕| 欧美日韩一区二区三区四区在线观看| 亚洲调教视频在线观看| 亚洲视频图片小说| 国产欧美一区二区精品仙草咪 | 亚洲专区一二三| 国产精品区一区| 久久久久99精品国产片| 久久超碰97中文字幕| 一区二区三区在线视频播放| 欧美激情一区| 欧美日韩一区在线播放| 亚洲欧美国内爽妇网| 欧美一级久久久久久久大片| 亚洲国产精品99久久久久久久久| 亚洲区中文字幕| 国产精品成人在线观看| 久久躁日日躁aaaaxxxx| 欧美黑人一区二区三区| 亚洲免费视频观看| 久久精品在线观看| 亚洲无限av看| 久久一区二区三区四区| 亚洲午夜国产成人av电影男同| 午夜久久影院| 亚洲美女在线国产| 午夜在线播放视频欧美| 日韩视频免费大全中文字幕| 亚洲欧美日韩国产一区二区| 亚洲精品美女在线观看播放| 午夜精品电影| 亚洲午夜精品网| 在线日韩成人| 亚洲女同同性videoxma| 亚洲视频999| 国产午夜久久久久| 最新日韩在线视频| 狠狠色综合一区二区| 亚洲精品字幕| 亚洲国产精品久久久| 亚洲自拍高清| 99视频日韩| 久久综合伊人77777尤物| 亚洲欧美日韩一区二区三区在线观看| 欧美1区2区3区| 麻豆精品一区二区综合av| 欧美视频手机在线| 亚洲区在线播放| 亚洲国产小视频| 久久精品99国产精品| 亚洲婷婷综合色高清在线| 欧美成人亚洲成人日韩成人| 久久精品理论片| 国产精品久久综合| 在线一区二区日韩| 99亚洲一区二区| 国产一区香蕉久久| 欧美激情一区二区三区高清视频| 国产精品无码永久免费888| 亚洲国产日本| 亚洲国产精品成人va在线观看| 久久精品国产成人| 久久免费视频网| 国产一区二区剧情av在线| 亚洲图片在区色| 亚洲一区二区伦理| 欧美日韩情趣电影| 亚洲精品中文字幕在线| 一区二区三区**美女毛片| 欧美日韩18| 99精品视频免费观看| 一区二区三区久久| 欧美日本三级| 一区二区av在线| 亚洲欧美福利一区二区| 国产精品女主播一区二区三区| 亚洲综合国产| 久久久噜噜噜久久久| 狠狠色香婷婷久久亚洲精品| 久久精品国产99| 欧美国产第二页| 一区二区三区成人| 国产精品日韩在线| 久久精彩视频| 亚洲国产精品传媒在线观看 | 99国产精品一区| 校园春色综合网| 羞羞视频在线观看欧美| 国产欧美精品| 久久躁狠狠躁夜夜爽| 亚洲国产美女| 在线亚洲成人| 国产亚洲精品久久久久久| 久久理论片午夜琪琪电影网| 亚洲黄色免费电影| 亚洲免费一区二区| 激情综合色丁香一区二区| 嫩草国产精品入口| 一本不卡影院| 久久久久看片| 99re6这里只有精品| 国产日韩欧美一二三区| 欧美国产亚洲精品久久久8v| 99视频一区| 久久午夜国产精品| 99视频在线观看一区三区| 国产视频不卡| 免费成人av在线| 亚洲欧美日韩一区二区三区在线 | 欧美成人一区二区在线| 亚洲香蕉网站| 亚洲黄页一区| 国产欧美精品一区二区色综合| 欧美波霸影院| 久久爱www久久做| 洋洋av久久久久久久一区| 久久综合狠狠综合久久综青草 | 亚洲国产精品久久久久婷婷884| 亚洲午夜精品久久| 在线观看日韩av电影| 国产精品视频大全| 欧美日本国产| 裸体丰满少妇做受久久99精品 | 欧美一区综合| 一区二区三区欧美成人| 欧美激情一二区| 老牛影视一区二区三区| 欧美一区二区三区免费观看| 一区二区三区日韩精品视频| 亚洲激情成人网| 揄拍成人国产精品视频| 国产亚洲在线| 国产精品视频九色porn|