Замена текста в файле с датируемыми значениями - PullRequest
0 голосов
/ 02 февраля 2012

У нас есть образец текстового файла с текстом:

Вещи, которые Бог приготовил для тех, кто любит его

Мы прочитали текст в виде данных и дали некоторыезначения как это:

 The            1
----------
 things         2
----------
 God            3
----------
 has            4
----------
 prepared       5
----------
 for            6
----------
 those          7
----------
 who            8
----------
 love           9
----------
 him            10
----------

Мы пытаемся заменить текст во входном файле этими соответствующими числами.Является ли это возможным?Если возможно, как мы можем это сделать?

Edit2: мы редактировали наш код следующим образом:

:

void replace () {

        string s1, s2;            
        StreamReader streamReader;
        streamReader = File.OpenText("C:\\text.txt");
        StreamWriter streamWriter = File.CreateText("C:\\sample1.txt");
        int x = st.Rows.Count;
        int i1 = 0;                                       
            // Now, read the entire file into a string
            while ((line = streamReader.ReadLine()) != null)
            {
                for (int i = 0; i < x; i++)
                {
                s1 = Convert.ToString(st.Rows[i]["Word"]);
                s2 = Convert.ToString(st.Rows[i]["Binary"]);
                s2+="000";
                char[] delimiterChars = { ' ', '\t' };
                string[] words = line.Split(delimiterChars);

                    // Write the modification into the same file 
                    string ab = words[i1]; // exception occurs here
                   // Console.WriteLine(ab);
                    streamWriter.Write(ab.Replace(s1, s2));
                    i1++;                                       
                }                
            }
        streamReader.Close();
        streamWriter.Close();
    }

но мы 'вы получаете исключение «Индекс массива за пределами».мы не можем найти проблему.заранее спасибо

1 Ответ

0 голосов
/ 02 февраля 2012

Вот небольшой код, который поможет вам начать работу, он не был тщательно протестирован:

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();
        }
    }
}

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

ОБНОВЛЕНИЕ: Я только что заметил, что вопрос был обновлен, и больше нет возможности читать весь файл в одну строку. читать и писать весь текст за один раз, может быть, вы сможете повторно использовать его при чтении и записи по слову.

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