Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск и замена в в StringReader / 9 сообщений из 9, страница 1 из 1
19.05.2021, 22:20
    #40071506
trok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена в в StringReader
Здравствуйте!
Есть такая задача: читаю построчно из файла в переменную string. Строки такого вида
100: P и тут координаты. По координатам ищу номер, после чего номер "100:" надо заменить на другой номер. Сначала думал просто поиском и Replace в переменной, но столкнулся с таким моментом, что в переменной может быть и такое:
100: ....
1100: ....
2100: ...
через Replace заменит в каждой строке 100 на, например, 200, а надо только в той, что "100:". Вот и возник вопрос, как лучше решить эту задачу? Как вариант вызвать внутри StringReader еще один StringReader и читая построчно искать количество символов от начала строки до ":" и если оно равно длине строки на которую меняю, то делать замену.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//Ищем номер позиции в строке
int len=str.IndexOf(":");
//Сравниваем номер позиции с количеством символов в строке на которую надо заменить
if(len==num.Lenght)
{
//Делаем замену в считанной ранее строке
str=str.Replace(str,num);
//Меняем строку в общей строковой переменной
data=data.Replace(data,str);
}


Но как-то это громоздко
...
Рейтинг: 0 / 0
19.05.2021, 22:43
    #40071516
fkfka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена в в StringReader
StringReader это ведь просто одна из имплементаций TextReader - ни на что, кроме как последовательное чтение текста он не рассчитан.

trok
Как вариант вызвать внутри StringReader еще один StringReader

Надо больше жести, а то слабовато Ты какую проблему вообще хочешь решить-то, можешь сказать?
...
Рейтинг: 0 / 0
19.05.2021, 23:36
    #40071525
trok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена в в StringReader
fkfka,
Заменить конкретное число в конкретной строке. То есть в файле есть строки
100:
....
2100:
...
3100:
Я хотел бы заменить 100 на 200, то есть только строку в которой "100:". Но простым реплейсом он заменит 100 везде и в результате будет
200: (то что надо)
....
2200: (должно остаться 2100:)
....
3200: (должно остаться 3200:)
То есть найти и заменить только, то число которое задано конкретно.

авторНадо больше жести, а то слабовато

Так и я о том же
...
Рейтинг: 0 / 0
19.05.2021, 23:39
    #40071526
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена в в StringReader
trok
Но простым реплейсом он заменит 100 везде ..... заменить только, то число которое задано конкретно.
Что-то мешает воспользоваться Regex.Replace? или тут еще каким-то образом замешаны перекрестные ссылки между строками, я никак не могу понять задание.
...
Рейтинг: 0 / 0
20.05.2021, 00:01
    #40071530
trok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена в в StringReader
Что-то мешает воспользоваться Regex.Replace?
Вот и вопрос в этом, как и через что это лучше сделать. Regex я не пользовался, поэтому не в курсе, что там и как.
я никак не могу понять задание.

Найти точное вхождение одно строки в другую. Оно только одно и его и надо найти и заменить
...
Рейтинг: 0 / 0
20.05.2021, 00:47
    #40071539
fkfka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена в в StringReader
trok,

Код: c#
1.
2.
3.
4.
5.
6.
7.
using var textReader = new StreamReader("MyFile.txt"); // предположим, что файл в UTF-8
string line;
while((line = textReader.ReadLine()) != null) // круче, конечно, сделать с Async, но тут и так сойдет
{
    line = Regex.Replace(line, "^100:", "200:"); // но, лучше создать Regex один раз заранее - будет быстрее
    Console.WriteLine(line); // ну, или выводи туда, куда надо    
}
...
Рейтинг: 0 / 0
20.05.2021, 00:51
    #40071540
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена в в StringReader
trok
Найти точное вхождение одно строки в другую
Точное как раз-таки обеспечит Replace, тебе надо как раз не точное, а с дополнительными условиями, с которыми и надо определиться и четко сформулировать. К примеру в заменяемой строке предшествующий или последующий символ не должен быть цифрой. Или замена строго между началом строки и двоеточием и т.п.

trok
Найти точное вхождение одно строки в другую. Оно только одно и его и надо найти и заменить
А зачем тогда все эти рассказы про какие-то множества строк, какие-то файлы, стрингридеры, какие-то координаты и т.п.

trok
Regex я не пользовался
Самое время изучить. Это азбука разработчика.
...
Рейтинг: 0 / 0
20.05.2021, 01:26
    #40071543
trok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена в в StringReader
fkfka,
Спасибо. Буду копать
...
Рейтинг: 0 / 0
20.05.2021, 08:44
    #40071561
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск и замена в в StringReader
Читаешь построчно файл, если последние 3 символа перед ":" являются 100, то заменяешь, в противном случае-нет.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск и замена в в StringReader / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]