Всем привет! Столкнулся со следующей задачей. Есть документ формата txt
7200
20 1 4 -65 -25 1000 -1000 -3.4E+038 3.4E+038
0 0 0 0 0
2.570136 2.51 2.63
0.15013 0 0 2.570136 -3.4E+038 3.4E+038 1 1
0.15013 0 0 2.570136 -3.4E+038 3.4E+038 1 1
0.15013 0 0 2.570136 -3.4E+038 3.4E+038 1 1
0.15013 0 0 2.570136 -3.4E+038 3.4E+038 1 1
20 2 4 -65 -25 1000 -1000 -3.4E+038 3.4E+038
0 0 0 0 0
2.572938 2.51 2.63
0 -1.425686 0 2.572938 -3.4E+038 3.4E+038 1 1
0 -1.425686 0 2.572938 -3.4E+038 3.4E+038 1 1
0 -1.425686 0 2.572938 -3.4E+038 3.4E+038 1 1
0 -1.425686 0 2.572938 -3.4E+038 3.4E+038 1 1
20 3 4 -65 -25 1000 -1000 -3.4E+038 3.4E+038
0 0 0 0 0
2.615161 2.57 2.65
-1.425686 -2.708803 0 2.615161 -3.4E+038 3.4E+038 1 1
-1.425686 -2.708803 0 2.615161 -3.4E+038 3.4E+038 1 1
-1.425686 -2.708803 0 2.615161 -3.4E+038 3.4E+038 1 1
-1.425686 -2.708803 0 2.615161 -3.4E+038 3.4E+038 1 1
В первой строке число 7200 - т.е. это количество блоков. Далее есть строки
20 1 4 -65 -25 1000 -1000 -3.4E+038 3.4E+038
20 2 4 -65 -25 1000 -1000 -3.4E+038 3.4E+038
20 3 4 -65 -25 1000 -1000 -3.4E+038 3.4E+038
и т.д. 7200 раз
Вот в этих строках мне нужно заменить цифру 20 на цифру 160 Прошу помощи.
Ну вот вам регулярное выражение, которое ищет "20", которое стоит в начале строки, а после него следует ровно 8 групп из символов цифр, знаков +-, точки или буквы E разделенных пробелом и с переводом строки: (?<=^)20(?=( [0-9\-\+E\.]+){8}\r?$)
Проверить можно так:
var input = @"7200
20 1 4 -65 -25 1000 -1000 -3.4E+038 3.4E+038
0 0 0 0 0
2.570136 2.51 2.63
0.15013 0 0 2.570136 -3.4E+038 3.4E+038 1 1
0.15013 0 0 2.570136 -3.4E+038 3.4E+038 1 1
0.15013 0 0 2.570136 -3.4E+038 3.4E+038 1 1
0.15013 0 0 2.570136 -3.4E+038 3.4E+038 1 1
20 2 4 -65 -25 1000 -1000 -3.4E+038 3.4E+038
0 0 0 0 0
2.572938 2.51 2.63
0 -1.425686 0 2.572938 -3.4E+038 3.4E+038 1 1
0 -1.425686 0 2.572938 -3.4E+038 3.4E+038 1 1
0 -1.425686 0 2.572938 -3.4E+038 3.4E+038 1 1
0 -1.425686 0 2.572938 -3.4E+038 3.4E+038 1 1
20 3 4 -65 -25 1000 -1000 -3.4E+038 3.4E+038
0 0 0 0 0
2.615161 2.57 2.65
-1.425686 -2.708803 0 2.615161 -3.4E+038 3.4E+038 1 1
-1.425686 -2.708803 0 2.615161 -3.4E+038 3.4E+038 1 1
-1.425686 -2.708803 0 2.615161 -3.4E+038 3.4E+038 1 1
-1.425686 -2.708803 0 2.615161 -3.4E+038 3.4E+038 1 1";
var pattern = @"(?<=^)20(?=( [0-9\-\+E\.]+){8}\r?$)";
var replacement = "160";
var result = Regex.Replace(input, pattern, replacement, RegexOptions.Multiline);
Console.WriteLine(result);
Для загрузки входной строки из файла используйте File.ReadAllText
, а для записи File.WriteAllText
, итого ваш код будет выглядеть так:
var filename = "...";
var input = File.ReadAllText(filename);
var pattern = @"(?<=^)20(?=( [0-9\-\+E\.]+){8}\r?$)";
var replacement = "160";
var result = Regex.Replace(input, pattern, replacement, RegexOptions.Multiline);
File.WriteAllText(filename, result);
Универсальный шаблон, если число, которое необходимо заменить, может быть любым (целым неотрицательным):
var pattern = @"(?<=^)\d+(?=( [\d\-\+E\.]+){8}\r?$)";
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Имеется некий поток ThreadTwo где расположен код:
Помогите разобраться с ошибкой в кодеВ данном коде бот не запускается из-за строки: if (error) throw new Error(error) - она находится в конце кода в функции...
ПомогитеВот сам код, который, к сожалению, не работает:Посмотрите, пожалуйста, в чем ошибка