Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/23: Рейтинг темы: голосов - 23, средняя оценка - 4.61
NowMatrix
96 / 79 / 16
Регистрация: 14.01.2011
Сообщений: 438
1

Считывать информацию из файла, пропуская пустые строки

02.01.2012, 19:40. Просмотров 4550. Ответов 15
Метки нет (Все метки)

В общем никак не пойму в чём проблема.. Условие while не срабатывает,вот код:

C#
1
2
3
4
5
6
7
8
9
StreamReader file = new StreamReader(@a, Encoding.Default);
            List<string> str = new List<string>();
            string b;
 
            while ((b = file.ReadLine()) != null || (b = file.ReadLine()) != "")
            {
                str.Add(b);
            }
            file.Close();
В режиме отладки в переменную "b" и в список "str" следовательно записываются и null и нулевые строки...Не понимаю почему.. Ну ,а если просто запустить программу - будет бесконечно считывать файл и висеть.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2012, 19:40
Ответы с готовыми решениями:

Как считывать информацию с txt-файла
Имеется string level = { &quot;Аллея&quot;, &quot;аккуратный&quot;, &quot;абрикос&quot;, &quot;аромат&quot;,...

Отфильтровать пустые строки файла
Есть 10 label'oв в них из file.txt случайным образом заносятся 10 строчек (10 label's = 10 строчек)...

Удалить пустые строки из файла
Помогите убрать пустые строки на выходе ! Что-то не получается . using System; using...

Удалить из файла все пустые строки
Дан текстовый файл. Удалить из него все пустые строки.

Удалить пустые строки и лишние данные из файла
Привет всем. Часто бывает, что нужно отпарсить текстовый файл. Удалить пустые строки, удалить...

15
kolorotur
Эксперт .NET
11886 / 9442 / 2412
Регистрация: 17.09.2011
Сообщений: 16,150
Завершенные тесты: 1
02.01.2012, 19:55 2
Что значит "не срабатывает"?
Зачем вы считываете две строчки в условии?
Почему не пользуетесь методом string.IsNullOrEmpty?
1
Петррр
6182 / 3483 / 898
Регистрация: 28.10.2010
Сообщений: 5,928
02.01.2012, 20:01 3
C#
1
2
List<string> str = File.ReadAllLines(@"D:\text.txt", Encoding.Default).
    Where(x => !string.IsNullOrEmpty(x)).ToList();
1
NowMatrix
96 / 79 / 16
Регистрация: 14.01.2011
Сообщений: 438
02.01.2012, 20:02  [ТС] 4
Изначально код был такой.По идее как только появляется строка со значением null,цикл должен прекращаться,но продолжает дальше работать бесконечно. Сделал вторую проверку на нулевую длину строки для теста.

C#
1
2
3
4
5
6
7
8
9
StreamReader file = new StreamReader(@a, Encoding.Default);
            List<string> str = new List<string>();
            string b;
 
            while ((b = file.ReadLine()) != null)
            {
                str.Add(b);
            }
            file.Close();
0
02.01.2012, 20:02
Петррр
6182 / 3483 / 898
Регистрация: 28.10.2010
Сообщений: 5,928
02.01.2012, 20:05 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
 
class Program
{
    static void Main(string[] args)
    {
        StreamReader reader = new StreamReader("D:\\text.txt", Encoding.Default);
        string b;
        List<string> str = new List<string>();
        while (!reader.EndOfStream)
        {
            b = reader.ReadLine();
            str.Add(b);
        }
        reader.Close();
        Console.ReadKey(true);
    }
}
1
NowMatrix
96 / 79 / 16
Регистрация: 14.01.2011
Сообщений: 438
02.01.2012, 20:09  [ТС] 6
Петррр, спасибо,но у вас я так понял считывается до конца файла
C#
1
while (!reader.EndOfStream)
или до первого null значения?
0
Петррр
6182 / 3483 / 898
Регистрация: 28.10.2010
Сообщений: 5,928
02.01.2012, 20:13 7
До конца.
0
NowMatrix
96 / 79 / 16
Регистрация: 14.01.2011
Сообщений: 438
02.01.2012, 20:13  [ТС] 8
Мне надо считать до первой null строки. И объясните мне пожалуйста, почему вот это не работает?

C#
1
2
3
4
5
while ((b = file.ReadLine()) != null)
            {
                str.Add(b);
            }
            file.Close();
0
Петррр
6182 / 3483 / 898
Регистрация: 28.10.2010
Сообщений: 5,928
02.01.2012, 20:26 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
 
class Program
{
    static void Main(string[] args)
    {
        StreamReader reader = new StreamReader("D:\\text.txt", Encoding.Default);
        string b = string.Empty;
        List<string> str = new List<string>();
        while (!reader.EndOfStream && !string.IsNullOrEmpty((b = reader.ReadLine())))
            str.Add(b);
        reader.Close();
        str.ForEach(Console.WriteLine);
        Console.ReadKey(true);
    }
}
Добавлено через 6 минут
http://www.cyberforum.ru/faq/thread294989.html
Файл "дурак", он не знает что такое null, и если вы читаете пустую строку, то возвращается пустая строка, а пустая строка это не тоже самое что null
1
NowMatrix
96 / 79 / 16
Регистрация: 14.01.2011
Сообщений: 438
02.01.2012, 21:31  [ТС] 10
Всё равно не понимаю,вот эта строка
C#
1
while ((b = file.ReadLine()) != null)
,как я понимаю сначала из файла записывает в переменную "b" строчку, а потом переменная "b" сравнивается со значением null,и если b!=null то цикл продолжается,иначе цикл завершается...Где я не так размышляю,подскажите?

Добавлено через 14 минут
А на счёт null понял,знаю,что не то же самое. Но и так то тоже не завершается цикл,встречая пустую строку:
C#
1
2
3
4
5
while ((b = file.ReadLine()) != "")
            {
                str.Add(b);
            }
            file.Close();
Добавлено через 40 минут
Вот кстати копипаст из Г.Шилдта
C#
1
2
3
4
5
6
StreamReader fstr_in = new StreamReader(fin);
// Считываем файл построчно,
while ((s = fstr__in.ReadLine () ) != null) {
Console.WriteLine(s);
}
f strain. Close () ;
0
kolorotur
Эксперт .NET
11886 / 9442 / 2412
Регистрация: 17.09.2011
Сообщений: 16,150
Завершенные тесты: 1
02.01.2012, 22:20 11
Цитата Сообщение от NowMatrix Посмотреть сообщение
как я понимаю сначала из файла записывает в переменную "b" строчку, а потом переменная "b" сравнивается со значением null,и если b!=null то цикл продолжается,иначе цикл завершается...Где я не так размышляю,подскажите?
Совершенно верно размышляете.

Цитата Сообщение от NowMatrix Посмотреть сообщение
Но и так то тоже не завершается цикл,встречая пустую строку
А вы уверены, что строка пустая?
1
NowMatrix
96 / 79 / 16
Регистрация: 14.01.2011
Сообщений: 438
02.01.2012, 22:38  [ТС] 12
Цитата Сообщение от kolorotur Посмотреть сообщение
А вы уверены, что строка пустая?
Ну да,в список записывались пустые строки.Это если экспериментировать с первым куском кода,который я предоставил.
0
Петррр
6182 / 3483 / 898
Регистрация: 28.10.2010
Сообщений: 5,928
02.01.2012, 22:46 13
вот это у меня работает. Выкладывате файл. И говорите до куда надо считать.
1
NowMatrix
96 / 79 / 16
Регистрация: 14.01.2011
Сообщений: 438
02.01.2012, 23:29  [ТС] 14
Да я всё уже сделал,спасибо всем. Кстати
Петррр, эта инструкция теперь почему то заработала:

C#
1
2
3
4
5
while ((b = file.ReadLine()) != null)
            {
                str.Add(b);
            }
            file.Close();
Т.е. цикл прекращается,как встречает null строку. Вообще мистика какая то..
0
kolorotur
Эксперт .NET
11886 / 9442 / 2412
Регистрация: 17.09.2011
Сообщений: 16,150
Завершенные тесты: 1
02.01.2012, 23:53 15
Цитата Сообщение от NowMatrix Посмотреть сообщение
цикл прекращается,как встречает null строку.
null возвращается тогда, когда поток заканчивается, то есть весь файл прочитан.
1
NowMatrix
96 / 79 / 16
Регистрация: 14.01.2011
Сообщений: 438
03.01.2012, 00:14  [ТС] 16
Аа,всё спасибо,вразумили).
0
03.01.2012, 00:14
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2012, 00:14

Как считывать из текстового файла, пропуская первую строку?
Имею такой код: procedure TF_knopka.fZagrClick(Sender: TObject); // Закрузка...

Как считывать информацию из файла и проверять ее ?
При регистрации &quot;правильные&quot; данные сохраняются в users.txt - в таком виде :...

Как правильно записывать и считывать информацию из бинарного файла
Всем привет, нужна помощь, есть код, оформлен вроде как правильно, вопрос такой - как правильно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru