Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
 Аватар для divert
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99

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

31.08.2014, 02:39. Показов 5972. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как создать функцию?
необходимо в файле вида
5255
3333
5555
6565
2222
найти строку 2222?
если строка найдена вернуть "ok" и остановить поиск в файле. обращаться к функции будут много потоков.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.08.2014, 02:39
Ответы с готовыми решениями:

Поиск в файле нужной строки и использование строки, находящейся рядом
Попробую объяснить, как можно, проще. Если что непонятно, напишите. Есть файл base.txt. В нем хранятся строки в формате: ...

Поиск по заданному выражению строки в файле и удаление найденной строки и нескольких прилежащих к ней строк
Доброго времени суток! Помогите, пожалуйста, разобраться. У меня лог файл, из которого мне нужно найти строки, в которых содержится...

Многопоточный загрузчик файлов по ссылкам в txt файле
Доброго времени суток! Не могу понять как реализовать многопоточный загрузчик файлов(картинки) по ссылкам с txt файла. Например есть 5...

17
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
31.08.2014, 03:02
Цитата Сообщение от divert Посмотреть сообщение
как создать функцию?
divert, метод, только метод...
Цитата Сообщение от divert Посмотреть сообщение
обращаться к функции будут много потоков.
Если нет общих (разделяемых) ресурсов (проверяются разные файлы), то нет никакой разницы, сколько потоков будет использоваться.

Добавлено через 9 минут
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.IO;
 
namespace ConsoleApplication25
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(FoundIt(@"C:\111.txt", "2222"));
            Console.ReadLine();
        }
        static bool FoundIt(string path, string pattern)
        {
            using (StreamReader sr=File.OpenText(path))
            {
 
                do
                {
                    string line = sr.ReadLine();
                    if (line == pattern)
                        return true;
                }
                while (!sr.EndOfStream);
            }
            return false;
        }
    }
}
0
 Аватар для divert
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
31.08.2014, 03:07  [ТС]
у меня пишет постоянно

Дополнительные сведения: Процесс не может получить доступ к файлу "G:\id.txt", так как этот файл используется другим процессом.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
31.08.2014, 03:09
Цитата Сообщение от divert Посмотреть сообщение
Процесс не может получить доступ к файлу
divert, вы русским языком скажите: файлов несколько или один?
0
 Аватар для divert
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
31.08.2014, 03:14  [ТС]
я написал так

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public string  s_id(string id, string n_file)
        {
            lock (n_file)
            {
            string str = String.Empty;
            using (StreamReader sr = new StreamReader(n_file))
            {
                while (!sr.EndOfStream)
                {
                    str = sr.ReadLine();
                    if (str.Contains(id))
                        id = "1";
                }
            }
            }
            return id;
          
        }
Добавлено через 17 секунд
один

Добавлено через 45 секунд
Цитата Сообщение от divert Посмотреть сообщение
using (StreamReader sr = new StreamReader(n_file))
ругаеться на это место

Добавлено через 2 минуты
я наверно не правильно lock ставлю ((((((((((

Добавлено через 50 секунд
ФАЙЛ ОДИН. я прошу прощения не увидел ваш вопрос
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
31.08.2014, 07:54
Цитата Сообщение от divert Посмотреть сообщение
ФАЙЛ ОДИН.
Простой вопрос - а зачем в одном файле через несколько потоков искать одно и то же? Или искать надо разные значения?
0
 Аватар для divert
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
01.09.2014, 22:15  [ТС]
расскажу принцип работы
мне нужно создать функцию которая будет работать в потоке
1. открывает файл ищет строку
2. если строка найдена возрощает 0
3. если нет 1
4. Другая функция записывает строки в файл (строки парсятся с сайта)

пробовал но пишет файл занят другим процессом и вылетает (((
0
Заблокирован
01.09.2014, 22:57
divert, может вы решаете задачу не так, как нужно?Вы уверены, что многопоточность лучшее решение? Лучше опишите то, что вы решаете в общих чертах. Правильно ли я вас понял:
1 функция записывает спарсенную инфрмацию в файл, а 2-ая одновременно ищет в том-же файле определенную строку?
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
01.09.2014, 23:05
Многопоточность прироста к скорости не даст, все потоки упрутся в скорость чтения с жесткого диска.
Один из вариантов вышеописанной проблемы чтение файла в массив с последующим разделеним на блоки которые нужно будет распределить между потоками. В общем овчинка выделки не стоит, если только счет файлов не идет на сотни или тысячи
0
 Аватар для divert
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
02.09.2014, 00:14  [ТС]
наверно вы правы. надо все строки по таймеру раз в 1 сек загружать в масив а потом сравнивать на совпадение в потоке. а если строк будет более 100 000 ?

Добавлено через 47 минут
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
divert, может вы решаете задачу не так, как нужно?Вы уверены, что многопоточность лучшее решение? Лучше опишите то, что вы решаете в общих чертах. Правильно ли я вас понял:
1 функция записывает спарсенную инфрмацию в файл, а 2-ая одновременно ищет в том-же файле определенную строку?
да вы правильно поняли

просто мне нужна функция которая не давала повторно зайти по ссылки которая в файле (ссылка уже парсилась)
0
8 / 8 / 6
Регистрация: 14.06.2013
Сообщений: 65
02.09.2014, 00:23
эта ошибка вылетает когда файл во время выполнения открыт например блокнотом, рекомундую закрыть все программы которые могут испольовтаь данный файл, может проект перегрузить.
либо кароче сделай так

C#
1
2
3
4
5
6
7
8
9
10
11
12
            StreamReader sr = new StreamReader("file.txt");
            string line; int chislo = 0;
            while ((line = sr.ReadLine()) != null)
            {
                chislo = Int32.Parse(line);
 
                if (chislo == 2222) { line = "Find!"; break; }
            }
            if (line == "Find!") Console.WriteLine(0);
            else Console.WriteLine(1);
 
                Console.ReadLine();
файл размещен в папке bin проекта.
0
 Аватар для divert
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
02.09.2014, 00:50  [ТС]
спасибо я пробывал так

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public string  s_id(string id, string n_file)
        {
            lock (n_file)
            {
            string str = String.Empty;
            using (StreamReader sr = new StreamReader(n_file))
            {
                while (!sr.EndOfStream)
                {
                    str = sr.ReadLine();
                    if (str.Contains(id))
                        id = "1";
                }
            }
            }
            return id;
          
        }
Добавлено через 24 минуты
то есть так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public string  s_id(string id, string n_file)
        {
            lock (n_file)
            {
            string str = String.Empty;
            using (StreamReader sr = new StreamReader(n_file))
            {
                while (!sr.EndOfStream)
                {
                    str = sr.ReadLine();
                    if (str.Contains(id))
                        id = "1"; break; 
                }
            }
            }
            return id;
          
        }
0
Заблокирован
02.09.2014, 00:56
divert, так может вы просто не той дорогой идете? Может есть способ вообще не писать в файл, а хранить все в списке и уже с ним работать?
0
 Аватар для divert
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
02.09.2014, 00:59  [ТС]
всмысле так ? List<string> ToWrite = new List<string>();

Добавлено через 52 секунды
и работать с ним ? он будет в памяти сидеть ? много он строк может хранить ?
0
Заблокирован
02.09.2014, 01:02
divert, да

Добавлено через 2 минуты
Цитата Сообщение от divert Посмотреть сообщение
и работать с ним ? он будет в памяти сидеть ? много он строк может хранить ?
http://msdn.microsoft.com/ru-r... .110).aspx
повторюсь:
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Лучше опишите то, что вы решаете в общих чертах.
Чем больше предоставите информации, тем проще будет помочь.
0
 Аватар для divert
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
02.09.2014, 10:06  [ТС]
а как правильно написать функцию для поиска строки в List<string> ToWrite = new List<string>();

Добавлено через 9 часов 1 минуту
я понимаю мне надо использовать FindAll
есть List<string> ToWrite = new List<string>();
в ToWrite записаны поля вида

http://ya.ru
http://mail.ru
.......

как написать условие что в ToWrite есть уже http://ya.ru
0
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
02.09.2014, 13:35
divert, может вам это нужно
C#
1
2
3
4
5
6
7
8
9
            List<string> ToWrite = new List<string>()
            {
                "http://ya.ru",
                "http://mail.ru",
                "......."
            };
            string strFind = "http://ya.ru";
 
            Console.WriteLine(ToWrite.Contains(strFind) ? "Такая строка есть" : "Такой строки нет");
Добавлено через 4 минуты
Цитата Сообщение от divert Посмотреть сообщение
мне надо использовать FindAll
C#
1
2
3
4
5
6
7
8
9
10
11
            List<string> ToWrite = new List<string>()
            {
                "http://ya.ru",
                "http://mail.ru",
                "......."
            };
            
            string strFind = "http://ya.ru";
 
            foreach(var i in ToWrite.FindAll(x => x == strFind))
            Console.WriteLine(i);
0
 Аватар для divert
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
06.09.2014, 14:03  [ТС]
спасибо всем!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2014, 14:03
Помогаю со студенческими работами здесь

Поиск строки в файле
Нужно реализовать поиск определенной строки в файле base.txt, человек вводит в форму данные, например номер телефона 02, и скрипт ищет и...

Поиск строки в файле
Как сделать поиск строки в файле я знаю: procedure TForm1.Button1Click(Sender: TObject); var MasText :array of string; ...

Поиск строки в файле
Друзья. прошу помочь советом ибо мозг сломал совсем итак, имеется файл с набором символов, например вот такого вида- 'bla bla bla...

Поиск строки в файле
Помогите сделать рабочий поиск строки в файле, заранее спасибо) struct book { char name; char author; int year; int...

Поиск строки в файле
Добрый вечер, Посоветуйте, как можно реализовать поиск строки в одном файле &quot;log.txt&quot; и если нету этой строки то записать ее в файлы...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip . . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru