c # проблема с сохранением в txt и новой строкой в ​​data.txt - PullRequest
0 голосов
/ 21 ноября 2018

У меня проблема.Я должен сохранить цифры в TXT (это не важно, что это значит).Я хотел бы иметь пробел между числами.Когда я пытаюсь сохранить его без пробелов, он работает хорошо Это мой код без пробелов

if (x_dolny > x1_sqr && x_dolny < x2_sqr)
{ 
   using (StreamWriter streamW = new StreamWriter("C:\\Users\\Desktop\\outputdata.txt", true))
   {
      streamW.Write("1");
   }
}
else if (y_prawy < y1_sqr && y_prawy > y2_sqr)
{
   using (StreamWriter streamW = new StreamWriter("C:\\Users\\Desktop\\outputdata.txt", true))
   {
      streamW.Write("1");
   }
}
else if (delta >= 0.0)
{
   using (StreamWriter streamW = new StreamWriter("C:\\Users\\Desktop\\outputdata.txt", true))
   {
      streamW.Write("2");
   }
}
else
{
    using (StreamWriter streamW = new StreamWriter("C:\\Users\\Desktop\\outputdata.txt", true))
      {
         streamW.Write("0");
      }
}
using (StreamWriter streamW = new StreamWriter("C:\\Users\\Desktop\\outputdata.txt", true))
{
   streamW.WriteLine("New line");
}

А вот скриншот outputdata.txt screen without spaces

изатем я попытался добавить "\ t", так что теперь у меня есть

streamW.Write("1 \t");
streamW.Write("2 \t");
streamW.Write("0 \t");

, но файл выглядит так Code with spaces

Я не понимаю, почему он обрезает моии перейдите к следующей строке ... Есть идеи?

1 Ответ

0 голосов
/ 21 ноября 2018

Как отметил @Sinatr в комментариях, это может быть просто проблема переноса слов в текстовом редакторе.

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

using (var streamWriter = new StreamWriter(@"C:\Users\Desktop\outputdata.txt", true))
{
    string message = "0";

    if (MessageIs1(x_dolny, x1_sqr, x2_sqr, y_prawy, y1_sqr, y2_sqr))
        message = "1";
    else if (delta >= 0.0)
        message = "2";

    streamWriter.Write(message);
    streamWriter.WriteLine("New line");
}

// ...

private static bool MessageIs1(int x_dolny, int x1_sqr, int x2_sqr, 
                               int y_prawy, int y1_sqr, int y2_sqr)
{
    return (x_dolny > x1_sqr && x_dolny < x2_sqr) 
        || (y_prawy < y1_sqr && y_prawy > y2_sqr);
}

Вот несколько советов:

  1. Вы повторно использовали StreamWriter в каждой ветви ваших операторов if и даже после.Вместо того, чтобы вводить операторы using несколько раз, оберните их все в один оператор using.Попробуйте следовать принципу DRY (не повторяйте себя).

  2. Вы можете использовать var, когда тип данных очевиден из назначения (например,создание new объектов).

  3. Постарайтесь сделать ваши идентификаторы (имена переменных и имена методов) как можно более четкими и краткими.Другим, читающим ваш код, не нужно много оглядываться, чтобы понять, что делают ваши переменные или методы;это должно быть очевидно только из названия.Избегайте аббревиатур, потому что другие могут не знать, что означает аббревиатура, или могут предполагать, что это означает что-то другое.Я не знал, для чего были ваши переменные, потому что я не мог взглянуть на полный исходный код, но я определенно переименовал бы следующее из моего примера выше: x_dolny, x1_sqr, x2_sqr, y_prawy, y1_sqr, y2_sqr, MessageIs1.

  4. Извлечение сложной логической логики в метод, чтобы ее было легче читать и изменять, если вам или кому-то еще потребуется позже.

  5. Используйте verbatim string literals для путей к файлам.

  6. Попробуйте придерживаться принципа KISS (СохранитьЭто просто, глупо) как можно больше.Большинство разработчиков сверхинженерно.Простой код легко читать, понимать, поддерживать и расширять.

...