Удалить последний экземпляр определенной строки из текстового файла без изменения других экземпляров строки - PullRequest
5 голосов
/ 21 мая 2010

У меня есть программа на C #, в которой я использую большое количество RegEx.Replace для замены текста в моем текстовом файле.

Вот моя проблема.

В моем текстовом файле я имеюкод, такой как "M6T1".Этот код указан в многочисленных местах в текстовом файле.

Однако я хочу удалить его только снизу (последний экземпляр) в текстовом файле.Внизу текстового файла всегда будет «M6T1», но это не всегда последняя строка.Это может быть 3-я строка снизу, 5-я строка снизу и т. Д.

Я только хочу избавиться от последнего экземпляра "M6T1", поэтому RegEx.Replace здесь не будет работать.Я не хочу мешать другим "M6T1" в других местах текстового файла.

Может кто-нибудь дать мне решение этой проблемы?

Спасибо

Ответы [ 4 ]

15 голосов
/ 21 мая 2010
var needle = "M6T1";
var ix = str.LastIndexOf(needle);
str = str.Substring(0, ix) + str.Substring(ix + needle.Length);
2 голосов
/ 06 декабря 2011
public static string ReplaceFirstOccurrence (string Source, string Find, string Replace)
{
    int Place = Source.IndexOf(Find);
    string result = Source.Remove(Place, Find.Length).Insert(Place, Replace);
    return result;
}

public static string ReplaceLastOccurrence(string Source, string Find, string Replace)
{
    int Place = Source.LastIndexOf(Find);
    string result = Source.Remove(Place, Find.Length).Insert(Place, Replace);
    return result;
}
1 голос
/ 29 января 2014

Из-за моего низкого балла я не могу комментировать ответ kevingessner. Итак, я добавлю свой комментарий здесь, с модификацией его кода -

var needle = "M6T1";
var ix = str.LastIndexOf(needle);
str = str.Substring(0, ix) + str.Substring(ix + needle.Length);

Это может вызвать исключение, когда индекс иглы = -1. Это происходит, когда игла не найдена в гирлянде / стоге сена. Чтобы избежать этого, я сделал это так -

String needle = "M6T1";
int ix = str.LastIndexOf(needle);
if(ix != -1){
      str = str.Substring(0, ix) + str.Substring(ix + needle.Length); 
}else{//not found}
0 голосов
/ 16 мая 2013

не могу прикрепить ответ пока что к сожалению.

но посмотри http://msdn.microsoft.com/en-us/library/vstudio/ms229012%28v=vs.100%29.aspx http://msdn.microsoft.com/en-us/library/vstudio/ms229004%28v=vs.100%29.aspx

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...