Если необходимо создать файл, я думаю, что можно, вероятно, сделать что-то вроде этого:
using (FileStream outFile = System.IO.File.Create(filename))
{
outFile.Seek(<length_to_write>-1, SeekOrigin.Begin);
OutFile.WriteByte(0);
}
, Где length_to_write был бы размером в байтах файла для записи. Я не уверен, что у меня есть корректный синтаксис C# (не на компьютере для тестирования), но я сделал подобные вещи в C++ в прошлом, и это работало.
если ваши индексы всегда заканчиваются на границах слов, вы можете сопоставить это:
page_ids.each do |id|
str = str.gsub(/##{id}\b/, link_to("##{id}", page_path(id))
end
вам нужно только добавить символ границы слова \ b
в шаблон поиска, это не требуется для шаблона замены.
Вместо того, чтобы сначала извлекать идентификаторы, а затем заменять их, вы можете просто найти и заменить их за один раз:
str = str.gsub(/#(\d*)/) { link_to("##{$1}", page_path($1)) }
Даже если вы не можете пропустить этап извлечения, потому что вам нужен идентификаторы где-то еще, это должно быть намного быстрее, так как не нужно проходить всю строку для каждого идентификатора.
PS: Если str
не упоминается ниоткуда, вы можете использовать str.gsub!
вместо str = str.gsub