Вот небольшой код, который поможет вам начать работу, он не был тщательно протестирован:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
File.WriteAllText("sample1.txt", "The things God has prepared for those who love him the");
string text = File.ReadAllText("sample1.txt").ToLower();
var words = text
.Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Distinct()
.OrderByDescending(word => word.Length);
var values = new Dictionary<string, int>();
for (int i = 0; i < words.Count(); i++)
{
values.Add(words.ElementAt(i), i + 1);
}
foreach (var kvp in values)
{
text = text.Replace(kvp.Key, kvp.Value.ToString());
}
File.WriteAllText("sample1.txt", text);
Console.WriteLine("Press ENTER to exit");
Console.ReadLine();
}
}
}
он создает тестовый текстовый файл, читает его, преобразует его в нижний регистр, создает идентификаторы для отдельных слов и заменяет текст на основе этих идентификаторов. длинные слова заменяются перед короткими словами, чтобы предложить немного плохой замены замены.
ОБНОВЛЕНИЕ: Я только что заметил, что вопрос был обновлен, и больше нет возможности читать весь файл в одну строку. читать и писать весь текст за один раз, может быть, вы сможете повторно использовать его при чтении и записи по слову.