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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(2330) 評論(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>
            欧美一区二区三区久久精品茉莉花| 亚洲免费在线电影| 久久综合中文色婷婷| 亚洲一区二区在线看| 国产精品推荐精品| 翔田千里一区二区| 亚洲免费视频成人| 国模精品一区二区三区| 久久不射中文字幕| 久久久久久久久久久成人| 在线观看日韩av先锋影音电影院| 毛片一区二区三区| 欧美韩国日本综合| 亚洲欧美日本国产有色| 欧美一区二区三区免费看| 国内精品嫩模av私拍在线观看| 久久综合色播五月| 欧美成人中文| 欧美一区在线视频| 美女视频黄免费的久久| 亚洲视频图片小说| 性色av一区二区怡红| 亚洲国产成人av| 亚洲美女av网站| 国产在线欧美| 亚洲韩国一区二区三区| 欧美日韩在线精品| 久久夜色精品| 国产精品mv在线观看| 久久久夜夜夜| 欧美日韩性视频在线| 久久久久久高潮国产精品视| 欧美激情免费观看| 久久美女性网| 欧美日韩一卡二卡| 欧美69视频| 国产精品激情偷乱一区二区∴| 久久久777| 欧美男人的天堂| 久久久精品性| 国产精品成人免费视频| 欧美激情精品| 国产在线观看一区| 99视频一区二区三区| 尤物在线精品| 欧美亚洲午夜视频在线观看| 日韩写真视频在线观看| 久久人人爽人人爽爽久久| 亚洲无线视频| 欧美日韩不卡在线| 美女网站久久| 国产亚洲激情| 亚洲一区二区黄| 亚洲桃色在线一区| 欧美人妖在线观看| 欧美激情 亚洲a∨综合| 韩日精品视频| 午夜宅男久久久| 午夜精品久久久久久久99黑人| 欧美日韩成人一区二区| 欧美激情一二三区| 亚洲高清av在线| 久久国产精品亚洲77777| 午夜激情综合网| 国产精品久久久久av| 一区二区三区国产在线| 一区二区三区四区在线| 欧美精品成人| 亚洲毛片在线看| 一区二区三区色| 欧美日韩精品在线| 99re66热这里只有精品4| 亚洲精品一区在线观看香蕉| 噜噜噜躁狠狠躁狠狠精品视频| 蜜桃久久av| 亚洲人成网站在线观看播放| 母乳一区在线观看| 亚洲国产日韩欧美在线图片| 亚洲国产三级| 欧美激情区在线播放| 亚洲免费黄色| 中文精品视频| 国产精品一区久久| 欧美综合二区| 蜜臀av性久久久久蜜臀aⅴ| 在线欧美影院| 欧美黄色aaaa| 亚洲乱码精品一二三四区日韩在线| 夜夜嗨av色综合久久久综合网 | 亚洲一二三四久久| 国产精品美女主播| 性色一区二区| 亚洲成人直播| 亚洲一区二三| 国产日韩一区二区三区在线播放| 久久av在线看| 亚洲激情av| 亚洲一区二区三区精品视频| 国产视频欧美| 欧美成人高清视频| 亚洲综合三区| 欧美大片免费| 亚洲一区二区高清视频| 国产亚洲欧美一级| 欧美精品久久久久久| 午夜精品一区二区三区在线| 老鸭窝亚洲一区二区三区| 日韩一区二区免费高清| 国产欧美精品日韩区二区麻豆天美| 久久久久久久久久久久久久一区 | 亚洲小少妇裸体bbw| 国产日韩欧美综合精品| 欧美成人综合| 欧美亚洲色图校园春色| 日韩视频一区| 免费看成人av| 欧美中文字幕视频| 日韩一级不卡| 亚洲第一主播视频| 国产欧美日韩一区二区三区在线观看 | 亚洲一区二区三区高清不卡| 嫩草影视亚洲| 性色av香蕉一区二区| 亚洲精品国产精品国产自| 国产欧美日韩91| 欧美人在线观看| 久久久久综合一区二区三区| 一区二区久久久久久| 欧美激情日韩| 美女91精品| 久久精品国产一区二区三| 中国av一区| 亚洲精品中文字幕在线| 有坂深雪在线一区| 国产一区二区精品在线观看| 国产精品乱人伦一区二区| 欧美高清视频一二三区| 久久久久女教师免费一区| 亚洲一区成人| 一区二区不卡在线视频 午夜欧美不卡在 | 国产精品视频网址| 国产精品成人v| 欧美日韩mp4| 欧美日本一区| 欧美日韩精品一区二区在线播放| 蜜桃视频一区| 免费亚洲一区| 欧美成人午夜激情视频| 欧美91福利在线观看| 久久综合久久88| 久久在线免费观看视频| 久久一区二区三区av| 久久先锋资源| 老色鬼精品视频在线观看播放| 久久久久国产精品午夜一区| 欧美自拍偷拍午夜视频| 久久久久久电影| 美女被久久久| 欧美精品在线看| 欧美香蕉大胸在线视频观看| 国产精品二区在线观看| 国产欧美日韩三级| 伊人久久婷婷色综合98网| 亚洲国产精品国自产拍av秋霞| 最新69国产成人精品视频免费 | 欧美日韩一区在线观看| 国产精品人成在线观看免费| 国产三级欧美三级日产三级99| 国产一区二区三区免费不卡| 在线播放一区| 一本综合精品| 久久成人18免费网站| 麻豆成人精品| 亚洲精品婷婷| 性高湖久久久久久久久| 欧美a一区二区| 国产精品v欧美精品v日韩精品| 国产一区二区三区不卡在线观看| 伊人久久大香线| 亚洲调教视频在线观看| 久久久久久成人| 亚洲国产日韩一区二区| 亚洲一区视频在线| 久久影院亚洲| 国产精品伦子伦免费视频| 影院欧美亚洲| 午夜日韩在线观看| 欧美风情在线观看| 亚洲夜间福利| 欧美+亚洲+精品+三区| 国产精品黄视频| 亚洲激情婷婷| 久久国产精品黑丝| 亚洲免费观看高清完整版在线观看熊 | 亚洲国产精品视频一区| 亚洲欧美日韩精品久久亚洲区| 久久综合一区二区三区| 国产女精品视频网站免费| 亚洲级视频在线观看免费1级| 欧美有码视频|