Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение строки до EOL из текст файла 
V
    Опции темы
aldari
Дата 21.2.2009, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



 Здравствуйте!
 Пишу парсер на С++ в VisualStudio 2005.
 Подскажите, пожалуйста, как читать строку до символа EOL. 
 В частности для StreamReader.
 
 Можно, конечно, воспользоваться стандартной библиотекой С++
 
Код

std::string str;
 std::fstream file("c:\\ldraw\\parts.lst",std::ios::in);
 while(getline(file,str))     
   {
   listBox1->Items->Add(String(str.c_str()).ToString());
   }   
 file.close();


 Но вот строка 
Код
String(str.c_str()).ToString()
 меня убивает, как правильно добавить строку в контрол?

 Для StreamReader нашел ReadLine метод.
 

Это сообщение отредактировал(а) aldari - 21.2.2009, 08:03
PM MAIL   Вверх
aldari
  Дата 22.2.2009, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Вот написал два способа:

Код

                int count;
                label2->Text=DateTime::Now.ToString();

                // запускаем в цикле чтобы оценить скорость
                for (int i=0;i<25;i++){
                // очищаем ListBox
                listBox1->Items->Clear();
                count=0;
                
                // один из способов нужно закоментировать
                ///*     
                // первый способ  С++ Standart Library 
                std::string str;       
                std::fstream file("parts.lst",std::ios::in);
                while(getline(file,str))    
                   {
                   listBox1->Items->Add(gcnew String(str.c_str()));
                   count++;
                   }    
                file.close(); 
                //*/  

             
                /* Второй способ - с помощью StreamReader
                StreamReader^ sr = gcnew  StreamReader("parts.lst",System::Text::Encoding::Default);
                String ^line;
    
                while (line=sr->ReadLine())
                   {
                   listBox1->Items->Add(line);
                   count++;
                   }
                   sr->Close();
                */
                }    

             // выводим время необходимое на чтение файла
             label3->Text=DateTime::Now.ToString();
             label1->Text=count.ToString();
             treeView1->EndUpdate();
             }


Можно что-нибудь улучшить в первом методе?
Первый метод читает за 9 сек.
Второй метод читает за меньше чем 8 сек.
Данные, компьютер одни и те же.
Файл в ASCII, поэтому часть времени тратиться, я так думаю, на преобразование в Unicode.
Файл не часто изменяется - можно его сразу пергнать в Unicode.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.