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

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

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

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

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

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

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

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

17
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
31.08.2014, 03:02 2
Цитата Сообщение от 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
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
31.08.2014, 03:07  [ТС] 3
у меня пишет постоянно

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

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
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
31.08.2014, 07:54 6
Цитата Сообщение от divert Посмотреть сообщение
ФАЙЛ ОДИН.
Простой вопрос - а зачем в одном файле через несколько потоков искать одно и то же? Или искать надо разные значения?
0
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
01.09.2014, 22:15  [ТС] 7
расскажу принцип работы
мне нужно создать функцию которая будет работать в потоке
1. открывает файл ищет строку
2. если строка найдена возрощает 0
3. если нет 1
4. Другая функция записывает строки в файл (строки парсятся с сайта)

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

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

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

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
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
02.09.2014, 00:50  [ТС] 12
спасибо я пробывал так

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 13
divert, так может вы просто не той дорогой идете? Может есть способ вообще не писать в файл, а хранить все в списке и уже с ним работать?
0
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
02.09.2014, 00:59  [ТС] 14
всмысле так ? List<string> ToWrite = new List<string>();

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

Добавлено через 2 минуты
Цитата Сообщение от divert Посмотреть сообщение
и работать с ним ? он будет в памяти сидеть ? много он строк может хранить ?
http://msdn.microsoft.com/ru-r... .110).aspx
повторюсь:
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Лучше опишите то, что вы решаете в общих чертах.
Чем больше предоставите информации, тем проще будет помочь.
0
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
02.09.2014, 10:06  [ТС] 16
а как правильно написать функцию для поиска строки в 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
532 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,754
02.09.2014, 13:35 17
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
0 / 0 / 0
Регистрация: 30.08.2014
Сообщений: 99
06.09.2014, 14:03  [ТС] 18
спасибо всем!
0
06.09.2014, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2014, 14:03
Помогаю со студенческими работами здесь

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

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

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

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

Поиск строки в файле
Подскажите, пожалуйста, что я не так делаю. Задача следующая: есть текстовый документ book. Нужно...

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru