2011-10-30 1 views
1

次のコードを使用して、複数の値をカンマ区切りのファイル形式で書くのに役立ちます。私の問題は、最後の要素がnormcsvに書き込まれた後にコンマを入れたくないということです。どのように私は一種の場合は句でbegを使用することができます。私は試してみたC++のイテレータの最後から2番目の位置を使用する方法

if(beg == penultimate element) 
then.... bla bla... 

すべてはイテレータが怒っているになってしまった無効

ReadLine.erase(0,17); 
int offsets[] = {8,8,8,8,8,8}; 
boost::offset_separator f(offsets, offsets+6); 
boost::tokenizer<boost::offset_separator> RVBEARline(ReadLine,f); 
boost::tokenizer<boost::offset_separator>::iterator beg; 

for(beg=RVBEARline.begin(); beg!=RVBEARline.end();++beg) 
{         
    copy=*beg; 
    boost::trim(copy); 
    if(copy.compare(0,1,".")==0) 
    { 
     copy.insert(0,"0"); 
    } 

    normcsv << copy <<","; 
} 

答えて

4

の代わりにカンマを印刷要素の後最後反復中を除き、最初反復中を除く前要素、それを印刷します。そのためにはif(beg != RVBEARline.begin())を使用できます。一度だけ呼び出され

{ 
    auto it = x.begin(), end = x.end(); 

    if (it != end) 
    { 
    for (; ;) 
    { 
     process(*it); 

     if (++it == end) break; 

     print_delimiter(); 
    } 
    } 
} 
ここ

x.begin()x.end()

+1

+1、私は '.begin()'とそれぞれのループ反復で '.end()'を呼び出すことを避けることを除いて、 –

+0

どうすればいいですか? – Lumpi

+0

@ Lumpi: '.begin()'と繰り返されるのではなく、単純な 'bool'変数で状態を追跡します。 – ildjarn

0

は、あなただけの、常に以来、最後の文字を削除できませんでしたあなたはそれが無関係なコンマになることを知っていますか?

+0

私のスニペットの最後から二番目の行では、outfileに "copy"を送り、その後にカンマ(csv形式を得るためにioを挿入する必要があります)が続きます。それは最後の "コピー"がファイルに送られることを除いて、すべてには必要であり、必要です。 – Lumpi

2

の「最初のプラス休む」ruakhアプローチをするための代替、あなたはループ半の構文を使用することにより、1つの少ないローカル変数を行うことができます。ループラウンドごとに1つの必須比較があり、可能な限り最小限です。空のチェックは外に持ち上げられます。

+0

+1:良い点。私の答えは少しだった。 。 。狭い。 – ruakh