2013-11-29 3 views
0

Я пытаюсь заменить все адреса из файла с другимиКак заменить строку с определенной позиции на другую?

До этого я сделать что-то вроде этого:

private static void findAndReplaceImgURLs(string s) 
{ 
    var server = HttpContext.Current.Server; 
    var cssLines = File.ReadLines(server.MapPath(s)); 
    int indexer = 0; 
    foreach (string line in cssLines) 
    { 
     int startPosition = line.IndexOf("url(\""); 
     int endPosition = line.IndexOf(".png)"); 
     if (startPosition != -1 && endPosition != -1) 
     { 
      //replace urls 
     } 
     indexer++; 
    } 
} 

Я не хочу, чтобы просто заменить все строки из определенного индекса , Я хочу заменить из одного индекса на другой все символы между ними. Как я могу это сделать?

+2

Возможно, вы должны использовать ['Regex.Replace'] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace%28v=vs.110%29.aspx) для этого. –

+1

Также обратите внимание, что вам вообще не разрешается изменять переменную, объявленную для цикла foreach. Что должно произойти с измененной линией; куда он должен идти? –

ответ

1

Вы можете объявить PREFIX/Postfix

string prefix = "url(\""; 
string postfix = ".png)"; 

, а затем

// replace urls 
newLine = line.Substring(0, startPosition) + prefix + newUrl + postfix 
    + line.Substring(endPosition + posfix.Length); 
// todo: put newLine in result, e.g. List<string> 

Таким образом, вы будете в конечном итоге с чем-то вроде:

var result = new List<string>(); 
foreach (string line in cssLines) 
{ 
    string prefix = "url(\""; 
    string postfix = ".png)"; 
    int startPosition = line.IndexOf(prefix); 
    int endPosition = line.IndexOf(postfix); 
    if (startPosition != -1 && endPosition != -1) 
    { 
     //replace urls 
     string newLine = line.Substring(0, startPosition) + prefix + newUrl 
      + postfix + line.Substring(endPosition + posfix.Length); 
     result.Add(newLine) 
    } 
} 
0

Один из вариантов прочитать содержимое CSS из файла и вызвать Заменить:

var cssContent = File.ReadAllText("styles.css"); 
cssContent = cssContent.Replace("url('../images/", "url('../content/"); 
File.WriteAllText("styles.css", cssContent); 
0

Использование формата строки.

string newLine = String.Format ("{0}{1}{2}{3}{4}",line.Substring(0, startPosition),prefix, newUrl,postfix,line.Substring(endPosition + posfix.Length)); 
1

Conisder используя Regex.Replace следующим образом ...

string output = Regex.Replace(input, "(?<=url(\).*?(?=.png)", replaceText); 

Good Luck!

Смежные вопросы