C # - заменить строку в текстовом файле между определенными значениями - PullRequest
0 голосов
/ 27 мая 2018

У меня возникают проблемы при попытке выяснить, как я могу заменить IP-адрес в файле конфигурации для приложения.IP-адрес находится в нескольких различных конфигурационных файлах, таких как ниже

[Connection]
### Address of the database server
DBServer=10.10.102.114
### Name of the database
DBData=DB1

Мне нужно иметь возможность прочитать файл, затем найти строку (для этого файла это будет "DBServer =") и иметьон заменяет строку между тем, что искали, и символом вторичной строки или конца строки, как в этом примере

Я могу только найти способы найти и заменить найденную строку, но IP-адрес другойв каждой установке, поэтому я не могу надежно искать IP напрямую

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 27 мая 2018

Спасибо всем, наконец-то заставили его работать, используя нижеприведенное ..... это может быть не лучшая практика, но, похоже, работает

string line;
using (StreamReader sr = new StreamReader(@"C:\config.ini"))
{
     line = sr.ReadToEnd();
}


Regex x = new Regex("(\\DBServer\\=)(.*?)(\n|\r|\r\n)");
string repl = IP;
string Result = x.Replace(line, "DBServer=" + repl + "$3");
using (StreamWriter writer =
     new StreamWriter(@"C:\config.ini"))
{
     writer.Write(Result);
}
0 голосов
/ 27 мая 2018

Этот файл является .ini файлом.В настоящее время они в значительной степени вышли из моды в пользу XML или, в последнее время, файлов конфигурации JSON.

Я рекомендую использовать ini-parser Пакет NuGet.

Вы можете использовать его для обновления значения DBServer:

string iniFile = @"test.ini";
var parser = new FileIniDataParser();
IniData data = null;
data = parser.ReadFile(iniFile);
data.Sections["Connection"]["DBServer"] = "newValue";
parser.WriteFile(iniFile, data);
0 голосов
/ 27 мая 2018

В тех случаях, когда вы знаете только шаблон, вы должны использовать регулярное выражение.Он очень прост в использовании.Вам нужно добавить это пространство имен:

    using System.Text.RegularExpressions;

Затем определите свой шаблон как:

    string pattern=@"DBServer=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})";
    Regex regex=new Regex(pattern);
    var match = regex.Match("YOUR_INPUT_STRING");
    string result;
    if(match.Success)
        if(match.Groups.Count > 0)
            result=match.Group[1].Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...