在C#中自动生成单词列表,并另存为文件

时间:2017-11-28 15:17:22

标签: c# string file ascii auto-generate

我需要帮助编写接受单个参数long i的方法:

public static string GetWord(long i)
{
    string s = "";

    //Update s using i

    return s;
}

...用于保存ASCII字文件的程序......

public static void main(string[] args) 
{
    try
    {
        int First = int.Parse(args[0]);
        int Last = int.Parse(args[1])
        string Filename = args[2]

        for(int i = start; i <= end; i++)
             File.AppendLine(Filename, GetWord(i));

        Console.WriteLine("Process complete");

    } 
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);

    }

}

......使用以下模式。

GetWord(0)应该是Encoding.ASCII.GetString(new byte[]{ 0 });

的结果

GetWord(1)应该是Encoding.ASCII.GetString(new byte[]{ 1 });

的结果

GetWord(2)应该是Encoding.ASCII.GetString(new byte[]{ 2 });

的结果

......等等GetWord(127)

GetWord(128)应该是GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 0 });

的结果

GetWord(129)应该是GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 1 });

的结果

GetWord(130)应该是GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 2 });

的结果

......等等GetWord(255)

GetWord(256)应该是GetWord(1) + Encoding.ASCII.GetString(new byte[]{ 0 });

的结果

GetWord(257)应该是GetWord(1) + Encoding.ASCII.GetString(new byte[]{ 1 });

的结果

GetWord(258)应该是GetWord(1) + Encoding.ASCII.GetString(new byte[]{ 2 });

的结果

......等等GetWord(16383)

GetWord(16384)应该是GetWord(0) + GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 0 });

的结果

GetWord(16385)应该是GetWord(0) + GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 1 });

的结果

GetWord(16386)应该是GetWord(0) + GetWord(0) + Encoding.ASCII.GetString(new byte[]{ 2 });

的结果

写下模式有助于我思考代码。我希望这对每个人都有意义。我想我需要使用递归和模数的混合来使其工作。

1 个答案:

答案 0 :(得分:0)

我想出的解决方案如下:

public void AppendFile(string filePath, long firstWord, long lastWord)
{            
    using (StreamWriter sw = File.AppendText(filePath))
    {
        for (long i = firstWord; i < lastWord; i++)
        {
            sw.WriteLine(GetWord(i));

        }

    }

}

public void AppendFile(string filePath, long lastWord)
{
    AppendFile(filePath, 0, lastWord);

}

public void AppendFile(string filePath)
{
    AppendFile(filePath, long.MaxValue);

}

public static string GetWord(long i)
{
    string s = Encoding.ASCII.GetString(new byte[] { (byte)(i % 128) });

    if (i < 128)
        return s;

    return GetWord(i / 128) + s;

}

以下列方式使用:

AppendFile("words.txt"); // Will most likely fall over or at least take a long time

AppendFile("words.txt", 1000); // This is the method requested

AppendFile("words.txt", 500, 1000); // Extended functionality
  

注意:我选择不使用史蒂夫的回答算法。我没有使用史蒂夫算法的原因是因为他在完整程序期间依赖于驻留在内存中的完整数组字,这将输出文件限制为可用RAM的数量。我的版本没有此限制,仅限于字符串的最大可能长度。