0

文本文件用于描述网络浏览器上的游戏状态。所以我需要格式化我的 nameWriter.WriteLine 看起来像。

Output to text file:
playerOneName, playerTwoName, _ , _ , _ , _ , _ , _ , _ , _

我知道这听起来可能像“哦,就这样写吧!” 但是不,下划线是一个空字段,将由我的 StreamWriter 替换,它跟踪玩家在井字游戏中的移动。我可以使用什么来代替下划线来使该空间可用于我的读写?

这是我的 StreamWriter,现在我只有添加播放器名称。

你能告诉我如何将输出格式化为文本吗?

也许将它分成一个数组?并使用数组 DelimiterList 来键入逗号?

    string[] lineParts... and reference the linePart[0-11] 
and then do a lineParts = line.Split(delimiterList)?

这是我的编写代码。

private void WriteGame(string playerOneName, string playerTwoName, string[] cells)
    {
        StreamWriter gameStateWriter = null;
        StringBuilder sb = new StringBuilder();
        try
        {
            gameStateWriter = new StreamWriter(filepath, true);
            gameStateWriter.WriteLine(playerOneName + " , " + playerTwoName);
            string[] gameState = { playerOneName, 
            playerTwoName, null, null, null, null, 
    null, null, null, null, null };//I cannot use null, they will give me errors
            foreach (string GameState in gameState)
            {
                sb.Append(GameState);
                sb.Append(",");
            }
            gameStateWriter.WriteLine(sb.ToString());
        }
        catch (Exception ex)
        {
            txtOutcome.Text = "The following problem ocurred when writing to the file:\n"
               + ex.Message;
        }
        finally
        {
            if (gameStateWriter != null)
                gameStateWriter.Close();
        }
    }

最后,如果 playerOneName 已经在文本文件中,我该如何在它之后专门写 playerTwoName 并检查它是否存在?

使用 Visual Studio '08 ASP.NET 网站和表单

4

2 回答 2

3

首先,定义下划线是一个特殊的东西,对你来说是空的,逗号是你的分隔符:

const string EMPTY = "_";
const string DELIMITER = ",";

其次,不要在逗号和值之间写空格,这只会让你以后的生活更加困难:

// removed spaces
gameStateWriter.WriteLine(playerOneName + DELIMITER + playerTwoName);

现在您的 GameState 已准备好创建:

string[] gameState = { playerOneName, playerTwoName, EMPTY, EMPTY, EMPTY, EMPTY, 
                       EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,  };

要检查玩家二是否已经存在,您需要打开并读取现有文件,并检查第二个令牌是否不为空。也就是说,如果您已阅读该文件;

var line = "..."; // read the file until the line that .StartsWith(playerOne)
var playerTwo = line.Split(DELIMITER)[1];

if (playerTwo == EMPTY)
{
     // need to store the real playerTwo, otherwise leave as is
}
于 2012-04-13T22:59:05.230 回答
0

您可以保留您的代码,但不要保留sb.Append(GameState);sb.Append(GameState??"_");当前代码中。

“??” 是C# 中的空合并运算符- 所以结果null ?? "_"是“_”并且"SomeValue"??"_"是“SomeValue”。

于 2012-04-13T23:33:01.557 回答