C # Как внедрить файл CSV в этот код - PullRequest
0 голосов
/ 01 ноября 2018

Привет, я новичок в кодировании, у меня есть фрагмент кода, который ищет строку и заменяет ее другой строкой, например:

var replacements = new[]{
   new{Find="123",Replace="Word one"},
   new{Find="ABC",Replace="Word two"},
   new{Find="999",Replace="Word two"},
};

var myLongString = "123 is a long 999 string yeah";

foreach(var set in replacements)
{
   myLongString = myLongString.Replace(set.Find, set.Replace);
}

Если я хочу использовать CSV-файл, который содержит много слов и их замен, например, LOL, Laugh Out Loud и ROFL, Roll Around Floor Laughing. Как бы я это реализовал?

1 Ответ

0 голосов
/ 01 ноября 2018

Создайте текстовый файл, который выглядит как (вы можете использовать запятые, но мне нравятся трубы (|)):

123|Word One
ABC|Word Two
999|Word Three
LOL|Laugh Out Loud
ROFL|Roll Around Floor Laughing

Затем создайте крошечный вспомогательный класс:

public class WordReplace
{
    public string Find { get; set; }
    public string Replace { get; set; }
}

И, наконец, назовите этот код:

private static string  DoWordReplace()
{
    //first read in the data
    var fileData = File.ReadAllLines("WordReplace.txt");
    var wordReplacePairs = new List<WordReplace>();
    var lineNo = 1;
    foreach (var item in fileData)
    {
        var pair = item.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries);
        if (pair.Length != 2)
        {
            throw new ApplicationException($"Malformed file, line {lineNo}, data = [{item}] ");
        }
        wordReplacePairs.Add(new WordReplace{Find = pair[0], Replace = pair[1]});
        ++lineNo;
    }

    var longString = "LOL, 123 is a long 999 string yeah, ROFL";

    //now do the replacements
    var buffer = new StringBuilder(longString);
    foreach (var pair in wordReplacePairs)
    {
        buffer.Replace(pair.Find, pair.Replace);
    }

    return buffer.ToString();
}

Результат:

Laugh Out Loud, Word One is a long Word Three string yeah, Roll Around Floor Laughing
...