Как написать / добавить выделенный текст в один файл в C #? - PullRequest
0 голосов
/ 01 июня 2011

Итак, я создал программу на C #, которая в основном отслеживает статистику для игры в бейсбол / софтбол, и все, что я хочу сделать, это создать «игровой журнал», который выводит основные моменты в игре в файл. Так, например, хотя я хочу, чтобы вывод на консоль запрашивал мои команды и тому подобное (и хотя я все еще хочу, чтобы он также отображал события в игре), я также хочу записывать такие внутриигровые события, как поля, мячи включите в игру, кто забьет и т. д. в один конкретный файл, который я обозначу.

Я пытался использовать StreamWriter, но проблемы:

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

Итак, вот как выглядит пример вывода моего кода на консоли (выделенные жирным шрифтом разделы - это то, чем я хочу быть в назначенном выходном файле AS WELL в качестве консоли, выделенные курсивом разделы - мой ввод). Обратите внимание, что этот макет работает не совсем так, как я хотел, но на моей консоли он выглядит отлично:

               R       H       E       LOB
Lady Sharks     0       0       0       0
Home Team       0       0       0       0

**Top 1**, 0 outs.

1B:
2B:
3B:

**1) K. Robinson #7** -- Today: 0 for 0

Count 0-0: *b*
**Ball.**

Count 1-0: *f*
**Foul Ball.**

Count 1-1: *p*
Ball is put in play.

Enter hit type (g/f): *g*
Enter hit zone (1-6): *4*

Enter result.

Choose from: 1b, 2b, 3b, hr, g, f, sh, sf, fc, e, gdp, di, bi
*1b*

Did the batter-runner advance any extra bases?

**In play, no out.
(1-1) K. Robinson singles on a ground ball to left field. 0 out.**

                R       H       E       LOB
Lady Sharks     0       1       0       0
Home Team       0       0       0       0

Top 1, 0 outs.

1B: K. Robinson #7
2B:
3B:

**2) S. Ribeiro #9** -- Today: 0 for 0

Count 0-0: *s*
**Swinging Strike.**

Count 0-1: *f*
**Foul Ball.**

Count 0-2: *s*
**Swinging Strike.**

Batter strikes out swinging. Confirm? (y/n)
*y*

Update status of runner on 1st, #7.

Batter may have reached base on exception. Indicate how many bases traveled with
 "+" signs.

This will result in an out. Are you sure? (y/n)
*y*

**(0-2) S. Ribeiro strikes out swinging. 1 out.**

                R       H       E       LOB
Lady Sharks     0       1       0       0
Home Team       0       0       0       0

Top 1, 1 out.

1B: K. Robinson #7
2B:
3B:

**3) B. Sutton #11 -- Today: 0 for 0**

Count 0-0: *b*
**Ball.**

Count 1-0: *b*
**Ball.**

Count 2-0: *sb*
Select which base the runner attemped to steal from.
*1*

Runner steals second base. Confirm? (y/n)
*y*

**K. Robinson steals second base.**

                R       H       E       LOB
Lady Sharks     0       1       0       0
Home Team       0       0       0       0

Top 1, 1 out.

1B:
2B: K. Robinson #7
3B:

3) B. Sutton #11 -- Today: 0 for 0

Count 2-0: *p*
Ball is put in play.

Enter hit type (g/f): *g*
Enter hit zone (1-6): *3*

Enter result.

Choose from: 1b, 2b, 3b, hr, g, f, sh, sf, fc, e, gdp, di, bi
*sh*

Update status of runner on 2nd, #7.
*+*
Batter may have reached base on exception. Indicate how many bases traveled with
 "+" signs.

This will result in an out. Are you sure? (y/n)
*y*

**In play, out(s).
(2-0) B. Sutton out on a sacrifice bunt. K. Robinson to 3rd. 2 outs.**

                R       H       E       LOB
Lady Sharks     0       1       0       0
Home Team       0       0       0       0

Top 1, 2 outs.

1B:
2B:
3B: K. Robinson #7

**4) S. Van Belleghem #29** -- Today: 0 for 0

Count 0-0: *p*
Ball is put in play.

Enter hit type (g/f): *f*
Enter hit zone (1-6): *5*

Enter result.

Choose from: 1b, 2b, 3b, hr, g, f, sh, sf, fc, e, gdp, di, bi
*f*

Update status of runner on 3rd, #7.

Middle of 1

**0 runs, 1 hit, 0 errors, 1 left on base**

Due up:

1) #1
2) #5
3) #3

Press enter to continue to Bottom 1.

Итак, еще раз, я хочу, чтобы эти полужирные части были записаны в файл, называемый, скажем, «Game 7 Log». Затем я сделаю по одному для каждой игры, чтобы я мог хранить эти записи каждой игры, шаг за шаг и тесто для теста. Если кто-нибудь знает, как я могу поместить эти выбранные тексты в файл, не вынимая никакой информации на моей консоли, спасибо!

1 Ответ

1 голос
/ 01 июня 2011

Как вы пишете в консоль. Просто Console.WriteLine? Я бы использовал такой подход:

  • Создайте вспомогательный метод, который вы используете вместо прямого вызова Console.Writeline

  • Определите критерий, который говорит, какая строка («события») идет в консоль, а какая - в консоль и файл (это может быть отдельный метод, параметр bool / enum в вашем методе или какой-нибудь характерный символ строки, данной вашему методу)

Очень простая реализация выглядит следующим образом:

public void Write(string Message, bool AlsoWriteToFile) {
  if(AlsoWriteToFile) {
    using(StreamWriter s = new StreamWriter("filename.txt") {
      s.WriteLine(Message);
    }
  }
  Console.WriteLine(Message);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...