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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему так работает? Цикл while + break 
:(
    Опции темы
Ukrajinec
Дата 11.2.2016, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток!
Идея такова, читается файл построчно, пока не кончится. Вот код который получил методом проб и ошибок. 
Код

while (reader.ReadLine() != null)
                {
                    if (reader.ReadLine() == null) break;
                    line = reader.ReadLine();                    
                    string str = FindXY(line).ToString();
                    richTextBox2.Text = str;
                    richTextBox2.Text = "\n";
                }

Теперь вопрос:
почему если убрать строчку
 
Код

...
 if (reader.ReadLine() == null) break;
...

или изменить условие цикла while
Код

while(true)
...

читается пустая строчка (null), а не прекращается цикл?


Это сообщение отредактировал(а) Ukrajinec - 11.2.2016, 19:43
PM MAIL   Вверх
_zorn_
Дата 12.2.2016, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

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



С шарпом не знаком, но мне кажется что во время проверки читается строка. 
Т.е. по факту в строке line = reader.ReadLine(); читается уже третья строчка при первом проходе. На втором 6-я ну и т.д.

Надо использовать что то вроде while(!reader.endOfFile()).

ЗЫ. С таким подходом удивляюсь почему в конце цикла еще одну точно такую же проверку не добавили... на всякий случай  smile 

Это сообщение отредактировал(а) _zorn_ - 12.2.2016, 04:06
PM MAIL   Вверх
chupachups
Дата 12.2.2016, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



потому что надо хелп читать и писать правильно:
Код

line = reader.ReadLine();                    
while (line != null)
{
    string str = FindXY(line).ToString();
    richTextBox2.Text = str;
    richTextBox2.Text = "\n";
    line = reader.ReadLine();                    
}


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
solowey
Дата 12.2.2016, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не согласен с предыдущим оратором. В мсдн так написано:
Код

using (StreamReader sr = new StreamReader(path)) 
{
    while (sr.Peek() >= 0) 
    {
        Console.WriteLine(sr.ReadLine());
    }
}

Предыдущий вариант, так же можно использовать...
И скорее всего по коду идет тройное считывание:
1 раз - while (reader.ReadLine() != null)
2 раз - if (reader.ReadLine() == null) break;
3 раз - line = reader.ReadLine();
На мой взгляд, в richTextBox2 должны попадать не все строки.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
chupachups
Дата 12.2.2016, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



насчет записи в richTextBox2 согласен, туда я даже не смотрел. НО:
1) по условию задачи "читается файл построчно, пока не кончится" - ни через-строчно, ни через-два-три-и.т.д.-строчно
2) следует из первого, раз уж построчно, то зачем почем зря Peek-ать? ИМХО моё предложение более читаемо и интуитивно понятно нежели через Peek
3) вообще сам автор по сабжу сильно смахивает на студента 1 курса, посему не вижу особого смысла выяснять - как быстрее и красивее, ибо преподу нужно чтоб работало как задумано, и строки не терялись

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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