2013-10-05 4 views
1

У меня есть три строковых файла, которые будут храниться в динамическом массиве, но я просто попробую один из трех файлов для проверки, если это удалось, поэтому я сделаю так же, как обрабатывать три файла у меня есть. Цель я покажу строку, которую я получаю из файла, в 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

Используйте 'std :: vector'. Это намного проще и безопаснее. – chris

+0

Здравствуйте, @chris благодарит за вас совет. Я попытался использовать 'std :: vector', но я получил ошибку, я использую 'cpp builder 2010' этот код 'std :: vector (std :: string) myline; while (std :: getline (ifs_Awal, myline)) \t { myline.push_back (myline); } ' –

+0

ошибка, где существует прямая 'while'? compiller говорит '' не удалось найти соответствие для std :: string <_Elem, _Traits, _Alloc> ... "' –

ответ

1

его легче, если вы используете зЬй :: вектор для динамических массивов и не забудьте сначала включить файл заголовка с #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(); 
} 

Надеюсь, это поможет

+0

Привет @Adhy. Ничего себе, ты снова на моем посту и помоги мне снова. код, как показано, это именно то, что я хочу. Большое спасибо –

3

Вы читаете этот файл, оставляя его открытым и ожидающим прочитать его снова. Это не сработает, потому что курсор в файле находится в конце файла (так что ваш второй цикл 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 
+0

привет @Zac Howland спасибо за ваше предложение, и я сожалею, что забыл положить delocator для показа на после. поэтому я редактировал свой код, см. выше. Я пробовал свой код, но я получаю ошибку, где существует '' while "'. компилятор говорит, что '' не смог найти соответствие для std :: string <_Elem, _Traits, _Alloc> ... "' –

+2

Возможно, потому что @ZacHowland дало себе как должное, что вы знали, что вы должны '#include ' и '# введите 'в исходный файл, прежде чем вы сможете использовать его фрагмент. Вы включили эти файлы заголовков? –

+0

Привет @lorenzo Donati, да, я сначала в заголовке. и я должен создать поток для проблем std :: vector и получить правильный ответ. спасибо за ваш совет –

Смежные вопросы