Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 06.08.2023
Сообщений: 4

Как вывести в консоль текст построчно?

06.08.2023, 18:20. Показов 3004. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день.
подскажите пожалуйста, как вывести в консоль текст построчно. задача, при нажатие "ввод", чтобы выводились строки последовательно.
спасибо

Добавлено через 1 час 44 минуты
пишу функцию.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        static         string Conclusion()
        {
            string conclusion, a = "";
            if (File.Exists(Path) == true)
            {
                using (StreamReader path = new StreamReader(Path))
                    while ((conclusion = path.ReadLine()) != null)
                    {
                        a = conclusion;
                        Console.ReadLine();
                        return a;
                    }
            }
            else
            {
                return "нет файла!";
            }
если вместо return, пишу Console.WriteLine, всё работает. с return пишет ошибку: "не все пути к коду возвращают значение".
подскажите, что правильно надо написать? что бы при нажатие enter выводилась очередная строка?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2023, 18:20
Ответы с готовыми решениями:

Вывод текст в консоль (не получается вывести текст в консоль; попытка была в разделе menu, но вывелся ужас)
d_d1 segment ;начало сегмента данных m1 db 23, '=========MENU=========', 23, '$' m2 db 23, '| 1- slodjenie |', 23, '$' m3 db...

Как построчно вывести текст файла
Как построчно вывести текст файла

Как построчно вывести текст из документа?
Не просто построчно, а так, чтобы при каждом вызове функции, она возвращала следующую строку. Я знаю про while(getline()) - но это...

44
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
09.08.2023, 01:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Wolfdp Посмотреть сообщение
со словами длинной до 20 символов и до 30 слов в строке
Хм... Если рассматривать это не в ширину, а в глубину...? Т.е. какая разница в количестве символов в строке.
Цитата Сообщение от Wolfdp Посмотреть сообщение
Дальше пихаем в билдер, и выдаем строку.
Ничего не хочу сказать, но вроде уже готовый из коробки ElementAtOrDefault делает тоже самое и даже быстрее... И, видимо, под капотом тоже есть что-то вроде:
Цитата Сообщение от Wolfdp Посмотреть сообщение
C#
1
builder.Clear();
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.08.2023, 01:25
Цитата Сообщение от wizard41 Посмотреть сообщение
Хм... Если рассматривать это не в ширину, а в глубину...?
не знаю, просто озвучил на чем проверяю. Теоретическая строка может быть как в 1 символ, так и в 1милиард.

Цитата Сообщение от wizard41 Посмотреть сообщение
Ничего не хочу сказать, но вроде уже готовый из коробки ElementAtOrDefault делает тоже самое и даже быстрее...
Перед тем как вызывать ElementAtOrDefault, вызывается ReadLines, который всегда возращает строку. Он не может скипнуть её, не считав

Добавлено через 8 минут
На всякий, я там провмыкал в "сокращении кода" в своем примере выше, по идеи правильно как-то так (асинхронность влепил чисто чтобы вспомнить как с ней работать)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System.Text;
 
await foreach (var s in SkipAndReadLines(@"source.txt", 3))
{
    Console.WriteLine(s);
    Console.ReadKey();
}
 
Console.ReadKey();
 
async IAsyncEnumerable<string> SkipAndReadLines(string path, int count)
{
    using var file = new StreamReader(path);
    var buff = new char[1024];
 
    var builder = new StringBuilder();
 
    var c = 0;
    do
    {
        c = await file.ReadAsync(buff);
        for (var i = 0; i < c; i++)
        {
            if (count == 0)
            {
                if (buff[i] == '\n')
                {
                    yield return builder.ToString();
                    builder.Clear();
                }
                else
                {
                    builder.Append(buff[i]);
                }
            }
            else if (buff[i] == '\n')
            {
                count--;
            }
        }
    }
    while (c > 0);
}
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
09.08.2023, 01:45
Wolfdp, разве что здесь считываются все строки после заданной. асинхронность тут маловажна, а вот запись в буфер тоже требует времени... Ну и получается что буфер всегда наполняется новыми продублированными строками, которые уже есть в предыдущих выборках. Ну на вскидку, в голове прокручиваю...

Добавлено через 5 минут
Цитата Сообщение от Wolfdp Посмотреть сообщение
new StreamReader
Опять же, сегодня тестировал - с File.ReadLine работает быстрее. Зачем внутри карусели новая?
Мне кажется созданием оберток над всеми этими стримами и ридерами мы мало чего добьемся. Они и так уже оптимизированы до нельзя.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.08.2023, 04:16
Цитата Сообщение от wizard41 Посмотреть сообщение
асинхронность тут маловажна
я же написал -- чисто для себя, вспомнить что оно такое. Не обращайте на async внимание, он на самом деле только отжирает память и что-то мне подсказывает что скорости оно тоже не добавляет.

Цитата Сообщение от wizard41 Посмотреть сообщение
Мне кажется созданием оберток над всеми этими стримами и ридерами мы мало чего добьемся.
вот банальный пример

C#
1
2
3
4
5
6
7
8
9
10
11
var s = Source().ElementAtOrDefault(2);
Console.ReadKey();
 
IEnumerable<string> Source()
{
    for (var i = 0; i < 5; i++)
    {
        Console.WriteLine(i);
        yield return i.ToString();
    }
}
вывод
Code
1
2
3
0
1
2
Тоже самое будет, когда вызовите Skip и прочее. У вас источник отработает до указаного элемента, т.к. он не может пропустить его магическим образом. Точнее для IList и еще какого-то источника (подозреваю сюда входять и массивы) выполняется непосредственное обращение по индексу, но вот для остального -- честно отрабатывает MoveNext() со всеми вытекающими.

Цитата Сообщение от wizard41 Посмотреть сообщение
Опять же, сегодня тестировал - с File.ReadLine работает быстрее. Зачем внутри карусели новая?
Экономия памяти. По скорости... Скажем так -- тут, при неправильном подходе можно даже проиграть, особенно в плане времени написания и вылавливания багов, эти полсотни строчки я доводил минут 30 до рабочего состояния. Допустим такой стрес тест (самописный код попытался чуть ускорить, но кажись профит так себе)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System.Diagnostics;
using System.Text;
 
var encoding = Encoding.UTF8;
const string path = @"source.txt";
//НАГЕНЕРИТ 2+ГБ !!!!!!!!!!!!
const int TotalLines = 1_000_000;
 
//InitFile(path);
//Console.WriteLine("file inited");
 
var sw = Stopwatch.StartNew();
 
//var s = File.ReadLines(path).ElementAtOrDefault(TotalLines);
var s = SkipAndReadLines(path, TotalLines).FirstOrDefault();
 
Console.WriteLine(sw.Elapsed);
Console.WriteLine(s);
Console.ReadKey();
 
void InitFile(string path)
{
    var chars = "qwertyuiopasdfdghjklzxcvbnm ";
    var random = new Random();
    var builder = new StringBuilder();
    using var file = new StreamWriter(path, false, encoding);
    for (var i = 0; i < TotalLines; i++)
    {
        var count = random.Next(10, 5000);
        for (var j = 0; j < count; j++)
        {
            builder.Append(chars[random.Next() % chars.Length]);
        }
        file.WriteLine(builder);
        builder.Clear();
    }
 
    file.WriteLine("Nya-ha-ha-ha!");
}
 
IEnumerable<string> SkipAndReadLines(string path, int count)
{
    using var file = new StreamReader(path, encoding);
    var buff = new char[2048];
 
    var builder = new StringBuilder();
 
    var i = 0;
    var c = 0;
    do
    {
        c = file.Read(buff);
        i = 0;
        while (i < c && count > 0)
        {
            if (buff[i++] == '\n')
                --count;
        }
    }
    while (c > 0 && count > 0);
 
    do
    {
        for (; i < c; i++)
        {
            if (buff[i] == '\n')
            {
                yield return builder.ToString();
                builder.Clear();
            }
            else
            {
                builder.Append(buff[i]);
            }
        }
        c = file.Read(buff);
        i = 0;
    }
    while (c > 0);
 
    if (builder.Length > 0)
        yield return builder.ToString();
}
При использовании File.ReadLines(path).ElementAtOrDefault отрабатывает за 6+ сек, в диспетчере показывает ~10Mb занятой памяти. При самописном варианте -- тоже 6+ сек, но уже отьедает ~5Mb. ВАЖНО!!! Всё это проверялось в релизной сборке. Если просто в дебаге -- памяти отьедает меньше (11 против 17, если судить по дебаг-тулзе), но вот скорость работы проседает до 13 сек.

Поменяем чуть предустановки -- файл будет содержать строки от 500к до 1кк, всего 5к записей (файл размером под 4Гб).
запускаем вариант readlines -- 11сек, 20Мб в пике
запускаем самописный вариант с буфером -- 10 сек и теже 5Мб ОЗУ

Не знаю, мне пока выглядит что GC прекрасно справляется со своими задачами и нужны ну прям очень серьезные основания что-либо тут велосипедить.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
09.08.2023, 12:16
Цитата Сообщение от Wolfdp Посмотреть сообщение
источник отработает до указаного элемента, т.к. он не может пропустить его магическим образом
Да, пожалуй вы правы, посмотрел обе реализации - чуда не случилось. В прочем, я с самого начала и говорил что иначе и не должно быть, так только немного верил что "может быть как-то можно"...
Самый что не есть MoveNext()...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2023, 12:16

Как вывести текст построчно на экран
Как вывести текст построчно и вообще как дальше работать со строками? Помогите, пожалуйста) Подскажите хотя бы, если где-нибудь есть...

Ввести построчно текст программы написанной на языке ПАСКАЛЬ. Заменить понятия тип INTEGER на ЦЕЛОЕ, REAL на ВЕЩЕСТВЕННОЕ. Вывести построчно получен
Помогите плз написать программу Ввести построчно текст программы написанной на языке ПАСКАЛЬ. Заменить понятия тип INTEGER...

Как из массива строк вывести текст в мемо, одной операцией, не выводя построчно?
Задача в следущем. Есть файл с байтами. После их раскодирования получаем двумерный массив тоже с байтами, но если эти байты представить в...

Как вывести текст на консоль
Первая задачка. К примеру есть дефолтное консольное приложение static void Main() { Console.Write(&quot; from...

Как вывести текст в консоль
Подскажите плз..мне нужно в консольном приложении вывести рисунок к примеру такой, как можно сделать это просто(новичок): ___Н __Н Н ...


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru