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

牽著老婆滿街逛

嚴(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>
            久久手机精品视频| 欧美一级专区| 噜噜爱69成人精品| 1000部精品久久久久久久久| 久久久精品tv| 久久国产精品一区二区三区| 精品动漫3d一区二区三区| 久久综合色88| 欧美巨乳波霸| 亚洲欧美日韩人成在线播放| 亚洲一区二区三区精品视频| 国产三区精品| 欧美成人精品在线视频| 欧美日韩国产一区二区三区地区| 亚洲精选久久| 亚洲视频免费看| 狠狠色2019综合网| 亚洲国产欧美日韩另类综合| 美女成人午夜| 午夜精品福利一区二区蜜股av| 欧美一级日韩一级| 99国产精品99久久久久久粉嫩| 一区二区三区国产在线观看| 国产一区91| 日韩视频在线免费观看| 国产偷久久久精品专区| 亚洲国产精品久久久久秋霞蜜臀| 欧美私人网站| 欧美成人视屏| 国产欧亚日韩视频| 亚洲国产美国国产综合一区二区| 国产精品一区二区久久| 亚洲国产精品va在线看黑人动漫 | 亚洲美女啪啪| 精品不卡视频| 亚洲欧美在线高清| avtt综合网| 老巨人导航500精品| 午夜精品一区二区三区四区 | 国内精品久久国产| 亚洲欧洲一级| 黄色日韩精品| 欧美一区不卡| 欧美一区二区三区四区高清| 欧美激情视频免费观看| 久热精品视频在线免费观看| 国产精品久久久久久久久久妞妞| 亚洲丰满在线| 亚洲风情亚aⅴ在线发布| 亚洲在线播放| 校园激情久久| 国产精品久久久久久久久动漫| 亚洲第一福利在线观看| 永久久久久久| 久久精品在线| 久久天天狠狠| 激情久久五月天| 欧美一级成年大片在线观看| 午夜欧美精品| 国产精品久久久久久久浪潮网站 | 欧美国产成人在线| 欧美国内亚洲| 亚洲精品国产品国语在线app| 久久久夜精品| 欧美成人精品激情在线观看| 亚洲福利在线视频| 免费成人在线观看视频| 欧美成人激情在线| 91久久午夜| 欧美精品午夜| 亚洲视频 欧洲视频| 午夜精品亚洲| 一区久久精品| 美女黄色成人网| 亚洲精品免费在线| 亚洲在线播放电影| 国产美女在线精品免费观看| 午夜免费日韩视频| 欧美 日韩 国产在线| 亚洲欧洲视频| 欧美日韩精品免费观看| 亚洲无吗在线| 久久综合色婷婷| 99re热精品| 国产精品一区久久久久| 久久精品国产99国产精品| 欧美成人一区二区三区片免费| 亚洲美女视频在线观看| 欧美日韩裸体免费视频| 亚洲一区二区三区中文字幕在线 | 99伊人成综合| 久久成人资源| 亚洲毛片一区二区| 国产精品一区视频| 美女精品视频一区| 亚洲一区综合| 欧美激情亚洲| 欧美一区二区三区精品电影| 亚洲福利一区| 国产精品自在线| 欧美成人午夜激情视频| 亚洲专区在线| 亚洲国产精品99久久久久久久久| 性刺激综合网| 日韩一级二级三级| 狠狠久久五月精品中文字幕| 欧美日韩免费观看一区| 久久久亚洲欧洲日产国码αv| 在线亚洲+欧美+日本专区| 免费日韩一区二区| 欧美亚洲综合另类| 日韩一二三在线视频播| 一区在线影院| 国产欧美一区二区三区久久| 欧美国产日韩一区二区在线观看| 欧美一区=区| 亚洲视频在线观看免费| 亚洲国产aⅴ天堂久久| 久久狠狠亚洲综合| 亚洲一区二区三区精品在线| 亚洲精品国产精品国产自| 国产亚洲视频在线观看| 国产精品黄色| 欧美日本高清| 欧美国产日韩免费| 麻豆av福利av久久av| 久久国产日韩| 欧美在线一级va免费观看| 亚洲私人影院| 一区二区三区回区在观看免费视频| 欧美成人在线影院| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美一区二区视频在线| 亚洲女人天堂av| 亚洲一级免费视频| 一区二区三区久久精品| 日韩午夜免费| 夜久久久久久| 亚洲深夜福利| 亚洲自拍偷拍麻豆| 亚洲在线不卡| 久久国产福利| 久久精品视频网| 久久一综合视频| 免费日本视频一区| 欧美第一黄色网| 亚洲国产日日夜夜| 亚洲精品欧美极品| 一区二区av在线| 亚洲视频在线视频| 午夜精品久久久久| 久久国产精品一区二区三区四区| 欧美在线免费播放| 久久综合久久88| 欧美高清一区| 国产精品成人在线观看| 国产日韩视频一区二区三区| 国产精品综合不卡av| 国内精品免费在线观看| 在线观看视频一区| 一区二区三区导航| 午夜精品福利一区二区三区av | 久久久www| 亚洲第一精品久久忘忧草社区| 亚洲国产精品久久久久| 一本色道88久久加勒比精品| 亚洲伊人一本大道中文字幕| 久久久久久网| 欧美理论电影在线播放| 国产精品久久中文| 激情小说亚洲一区| 一本色道久久综合一区| 欧美亚洲三级| 欧美成人日本| 亚洲一区日韩| 男人插女人欧美| 国产精品久久午夜夜伦鲁鲁| 18成人免费观看视频| 亚洲少妇自拍| 欧美顶级少妇做爰| 亚洲一区三区视频在线观看| 久久人人97超碰人人澡爱香蕉| 欧美日韩dvd在线观看| 国产日产欧产精品推荐色 | 黑人巨大精品欧美一区二区小视频 | 国产精品vvv| 在线欧美视频| 欧美一区二区| 亚洲人成网站影音先锋播放| 欧美亚洲日本网站| 欧美午夜精品久久久久久久| 狠狠综合久久av一区二区老牛| 一级成人国产| 欧美黄色一区| 欧美在线观看视频一区二区| 欧美日韩国产成人精品| 影音先锋日韩资源| 久久精品国产第一区二区三区| 亚洲免费观看高清在线观看| 久久久久久久久综合|