Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2016, 16:09   #21
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

const int BlockSize = 3;
тут любое кол-ство можно вписывать ?
komra2 вне форума Ответить с цитированием
Старый 31.10.2016, 16:47   #22
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от komra2 Посмотреть сообщение
const int BlockSize = 3;
тут любое кол-ство можно вписывать ?
Да. можно 50 вбить.
pu4koff вне форума Ответить с цитированием
Старый 31.10.2016, 17:53   #23
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Да. можно 50 вбить.
Если я хочу, "слить" несколько тхт и потом выполнить этот код, то будет как-то так:
Код:
const int BlockSize = 50; // количество строк в блоке

        static void ThreadFunc(object state) // обработка блока строк в отдельном потоке
        {

            var lines = state as IEnumerable<string>;

            foreach (var line in lines) // перебираем строки
            {
                Console.WriteLine("Thread: {0}\tLine: {1}", Thread.CurrentThread.ManagedThreadId, line);
                Console.WriteLine("End thread\tFirst line:{0}\tEndLine:{1}", lines.First(), lines.Last());
            }
        }
        static void Main(string[] args)
        {
            StreamReader sr1 = new StreamReader(@"C:\Users\LowFrequencySound\Desktop\test.txt");
            string aca = sr1.ReadLine();
            foreach (var result in
            from first in File.ReadLines(@"C:\Users\LowFrequencySound\Desktop\1.txt")
            from second in File.ReadLines(@"C:\Users\LowFrequencySound\Desktop\2.txt")
            from third in File.ReadLines(@"C:\Users\LowFrequencySound\Desktop\3.txt")
            from fourth in File.ReadLines(@"C:\Users\LowFrequencySound\Desktop\4.txt")
            from fifth in File.ReadLines(@"C:\Users\LowFrequencySound\Desktop\5.txt")
            from sixth in File.ReadLines(@"C:\Users\LowFrequencySound\Desktop\6.txt")
            select string.Concat(first, second, third, fourth, fifth, sixth))
                using (var reader = new StreamReader(здесь что писать ?))
                {
                    var lines = new List<string>(); // коллекция для сбора блока строк из файла
                    for (; ; )
                    {
                        var str = reader.ReadLine();
                        if (string.IsNullOrEmpty(str)) // файл дочитали до конца
                        {
                            if (lines.Count > 0) // в коллекции остались не отправленные на обработку строки
                            {
                                Console.WriteLine("Start Thread\tFirst line:{0}\tEndLine:{1}", lines[0], lines[lines.Count - 1]);
                                ThreadPool.QueueUserWorkItem(ThreadFunc, lines); // берём поток из пула и выполняем обработку блока строк
                            }
                            break;
                        }
                        lines.Add(str);
                        if (lines.Count == BlockSize) // прочитали нужное число строк из файла, значит можно блок строк отправлять на обработку в другой поток
                        {
                            Console.WriteLine("Start Thread\tFirst line:{0}\tEndLine:{1}", lines[0], lines[lines.Count - 1]);
                            ThreadPool.QueueUserWorkItem(ThreadFunc, lines); // берём поток из пула и выполняем обработку блока строк
                            lines = new List<string>();
                        }
                    }
                }
        }
мне как бы надо чтобы выводился чисто содержимое тхт файлов, мне не надо как бы вот эти :
"Thread: {0}\tLine: {1}"
"End thread\tFirst line:{0}\tEndLine:{1}"
ну кароче без этих console writeline

Последний раз редактировалось komra2; 31.10.2016 в 18:20.
komra2 вне форума Ответить с цитированием
Старый 31.10.2016, 17:57   #24
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не вижу смысла в чтении по 50 тут.
тут обычный линейный алгоритм.

и ридер тут вообще не нужен, у вас уже есть строки слитые.
смотрите внимательнее на свой foreach.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.10.2016, 18:11   #25
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
static void Main(string[] args)
        {
            StreamReader sr1 = new StreamReader(@"C:\Users\LowFrequencySound\Desktop\test.txt");
            string aca = sr1.ReadLine();
            var files = new List<string>();
            files.Add(@"C:\Users\LowFrequencySound\Desktop\1.txt");
            files.Add(@"C:\Users\LowFrequencySound\Desktop\2.txt");
            files.Add(@"C:\Users\LowFrequencySound\Desktop\3.txt");
            files.Add(@"C:\Users\LowFrequencySound\Desktop\4.txt");
            files.Add(@"C:\Users\LowFrequencySound\Desktop\5.txt");
            foreach (var filename in files)
            {
                using (var reader = new StreamReader(filename))
                {
                    var lines = new List<string>(); // коллекция для сбора блока строк из файла
                    for (; ; )
                    {
                        var str = reader.ReadLine();
                        if (string.IsNullOrEmpty(str)) // файл дочитали до конца
                        {
                            if (lines.Count > 0) // в коллекции остались не отправленные на обработку строки
                            {
                                Console.WriteLine("Start Thread\tFirst line:{0}\tEndLine:{1}", lines[0], lines[lines.Count - 1]);
                                ThreadPool.QueueUserWorkItem(ThreadFunc, lines); // берём поток из пула и выполняем обработку блока строк
                            }
                            break;
                        }
                        lines.Add(str);
                        if (lines.Count == BlockSize) // прочитали нужное число строк из файла, значит можно блок строк отправлять на обработку в другой поток
                        {
                            Console.WriteLine("Start Thread\tFirst line:{0}\tEndLine:{1}", lines[0], lines[lines.Count - 1]);
                            ThreadPool.QueueUserWorkItem(ThreadFunc, lines); // берём поток из пула и выполняем обработку блока строк
                            lines = new List<string>();
                        }
                    }
                }
             }
        }
pu4koff вне форума Ответить с цитированием
Старый 31.10.2016, 23:00   #26
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

а как быть если надо чтобы отображался чисто перебор без таких частей:""Start Thread\tFirst line:{0}\tEndLine:{1}""
komra2 вне форума Ответить с цитированием
Старый 31.10.2016, 23:29   #27
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

попробуйте прочитать код, а не тупо копипастить.
очевидно что если не нужно это выводить, то не надо это выводить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.10.2016, 23:37   #28
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

ну тут уже ничего не попишешь, или так или никак
или pu4koff должен переписать всё, вы то врядли справитесь с удалением лишних строк
come-on вне форума Ответить с цитированием
Старый 31.10.2016, 23:56   #29
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

сделал, только вот не понятно, че делать, если надо больше блоков, ну то есть первый блок берёт 50 строк, а если мне надо 50 блоков..
komra2 вне форума Ответить с цитированием
Старый 01.11.2016, 01:51   #30
komra2
Новичок
Джуниор
 
Регистрация: 10.04.2015
Сообщений: 733
По умолчанию

все равно не склеиваются эти тхт файлы((
komra2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточный curl nibufep PHP 2 05.04.2015 19:46
Режимы компиляции Многопоточный MT и Многопоточный DLL vasiatka Общие вопросы C/C++ 5 20.02.2014 19:56
c#. Многопоточный сервер tiger Помощь студентам 1 13.09.2012 13:24
многопоточный сервер мандарин Работа с сетью в Delphi 6 24.04.2007 07:22
Многопоточный Ping Квэнди Работа с сетью в Delphi 0 18.12.2006 15:01