1

動的配列に格納される 3 つの文字列ファイルがありますが、3 つのファイルのうちの 1 つを試して、これが成功したかどうかをテストするだけなので、同じ方法で 3 つのファイルを処理します。目標は、ファイルから取得した文字列をこのコードの ListView に表示することです。

void __fastcall TFrmNewPeta::showDefaultRute() {
    std::string lineDataAwal;
    std::ifstream ifs_Awal;
    int tempIndexAwal = 0;
    ifs_Awal.open("DefaultDataAwal");

        /*counting the line*/
        while(std::getline(ifs_Awal,lineDataAwal)){++tempIndexAwal;}

        /*use dynamic array to stored string*/    
        std::string *s = new std::string[tempIndexAwal];

        for(int dx=0;dx<tempIndexAwal;dx++)
        {
            while(std::getline(ifs_Awal,lineDataAwal))
          s[dx] = lineDataAwal[dx++];
        }

        for(int dex =0;dex<tempIndexAwal;++dex)
        {
           ItemDefult = ListView1->Items->Add();
           ItemDefult->Caption = String(IntToStr(dex + 1));
           ItemDefult->SubItems->Add(s[dex].c_str());
        }
        ifs_Awal.close();
    delete []s;
    s = NULL;
}

コンパイル中にエラーは発生しませんが、結果の ListView は、このコードで数値を表示するだけで、ItemDefult->Caption = String(IntToStr(dex + 1)); 誰でも最善の方法を示すことができます。

4

2 に答える 2

3

あなたはファイルを読んでいて、開いたままにして、もう一度読むことを期待しています。ファイル内のカーソルがファイルの最後にあるため、これは機能しません (したがって、2 番目の while ループは何もしません)。

より良いアプローチは次のとおりです。

std::vector<std::string> lines;
std::string line;
std::ifstream fin("Youfilename");

while (std::getline(fin, line))
{
    lines.push_back(line);
}
fin.close();
// add data to your list view
于 2013-10-05T23:22:27.623 に答える
1

動的配列に std::vector を使用し、最初にファイルヘッダーを含めることを忘れないでください。#include<vector>

void __fastcall TFrmNewPeta::showDefaultRute() {
    std::string lineDataAwal;
    std::ifstream ifs_Awal;
    std::vector<std::string> vec;
    ifs_Awal.open("DefaultDataAwal");

   /*get the string of lineDataAwal */
    while(std::getline(ifs_Awal,lineDataAwal))
    { vec.push_back(lineDataAwal);}

    for(int dex =0;dex<vec.size();++dex) 
    {
      ItemDefult = ListView1->Items->Add();
      ItemDefult->Caption = String(IntToStr(dex + 1));
      ItemDefult->SubItems->Add(vec.at(dex).c_str()); 
    }
   ifs_Awal.close();
}

お役に立てれば

于 2013-10-06T14:32:53.100 に答える