Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Поиск и замена в в StringReader  [new]
trok
Member

Откуда:
Сообщений: 50
Здравствуйте!
Есть такая задача: читаю построчно из файла в переменную string. Строки такого вида
100: P и тут координаты. По координатам ищу номер, после чего номер "100:" надо заменить на другой номер. Сначала думал просто поиском и Replace в переменной, но столкнулся с таким моментом, что в переменной может быть и такое:
100: ....
1100: ....
2100: ...
через Replace заменит в каждой строке 100 на, например, 200, а надо только в той, что "100:". Вот и возник вопрос, как лучше решить эту задачу? Как вариант вызвать внутри StringReader еще один StringReader и читая построчно искать количество символов от начала строки до ":" и если оно равно длине строки на которую меняю, то делать замену.
//Ищем номер позиции в строке
int len=str.IndexOf(":");
//Сравниваем номер позиции с количеством символов в строке на которую надо заменить
if(len==num.Lenght)
{
//Делаем замену в считанной ранее строке
str=str.Replace(str,num);
//Меняем строку в общей строковой переменной
data=data.Replace(data,str);
}

Но как-то это громоздко
19 май 21, 22:20    [22324476]     Ответить | Цитировать Сообщить модератору
 Re: Поиск и замена в в StringReader  [new]
fkfka
Member

Откуда:
Сообщений: 131
StringReader это ведь просто одна из имплементаций TextReader - ни на что, кроме как последовательное чтение текста он не рассчитан.

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

Надо больше жести, а то слабовато Ты какую проблему вообще хочешь решить-то, можешь сказать?
19 май 21, 22:43    [22324494]     Ответить | Цитировать Сообщить модератору
 Re: Поиск и замена в в StringReader  [new]
trok
Member

Откуда:
Сообщений: 50
fkfka,
Заменить конкретное число в конкретной строке. То есть в файле есть строки
100:
....
2100:
...
3100:
Я хотел бы заменить 100 на 200, то есть только строку в которой "100:". Но простым реплейсом он заменит 100 везде и в результате будет
200: (то что надо)
....
2200: (должно остаться 2100:)
....
3200: (должно остаться 3200:)
То есть найти и заменить только, то число которое задано конкретно.

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

Так и я о том же
19 май 21, 23:36    [22324523]     Ответить | Цитировать Сообщить модератору
 Re: Поиск и замена в в StringReader  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22390
trok
Но простым реплейсом он заменит 100 везде ..... заменить только, то число которое задано конкретно.
Что-то мешает воспользоваться Regex.Replace? или тут еще каким-то образом замешаны перекрестные ссылки между строками, я никак не могу понять задание.
19 май 21, 23:39    [22324525]     Ответить | Цитировать Сообщить модератору
 Re: Поиск и замена в в StringReader  [new]
trok
Member

Откуда:
Сообщений: 50
Что-то мешает воспользоваться Regex.Replace?

Вот и вопрос в этом, как и через что это лучше сделать. Regex я не пользовался, поэтому не в курсе, что там и как.
я никак не могу понять задание.

Найти точное вхождение одно строки в другую. Оно только одно и его и надо найти и заменить
20 май 21, 00:01    [22324534]     Ответить | Цитировать Сообщить модератору
 Re: Поиск и замена в в StringReader  [new]
fkfka
Member

Откуда:
Сообщений: 131
trok,

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); // ну, или выводи туда, куда надо    
}
20 май 21, 00:47    [22324550]     Ответить | Цитировать Сообщить модератору
 Re: Поиск и замена в в StringReader  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22390
trok
Найти точное вхождение одно строки в другую
Точное как раз-таки обеспечит Replace, тебе надо как раз не точное, а с дополнительными условиями, с которыми и надо определиться и четко сформулировать. К примеру в заменяемой строке предшествующий или последующий символ не должен быть цифрой. Или замена строго между началом строки и двоеточием и т.п.

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

trok
Regex я не пользовался
Самое время изучить. Это азбука разработчика.
20 май 21, 00:51    [22324552]     Ответить | Цитировать Сообщить модератору
 Re: Поиск и замена в в StringReader  [new]
trok
Member

Откуда:
Сообщений: 50
fkfka,
Спасибо. Буду копать
20 май 21, 01:26    [22324559]     Ответить | Цитировать Сообщить модератору
 Re: Поиск и замена в в StringReader  [new]
vb_sub
Member

Откуда:
Сообщений: 896
Читаешь построчно файл, если последние 3 символа перед ":" являются 100, то заменяешь, в противном случае-нет.
20 май 21, 08:44    [22324587]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить