Справка по оператору If; другой цвет для определенных критериев

#c# #asp.net #visual-studio #colors #if-statement

#c# #asp.net #visual-studio #Цвет #if-statement

Вопрос:

Я новичок, и утверждения If — моя слабость. У меня есть простая программа, которая отображает имена файлов, которые находятся в определенной папке. Однако в некоторых файлах могут быть строки, начинающиеся с LIFT . Я хочу перехватить те файлы, в которых есть эта определенная строка, и отобразить имя файла другим цветом (предпочтительно красным). Вот что у меня есть до сих пор: любая помощь будет с благодарностью!! Спасибо!

 public partial class ShippedOrders : System.Web.UI.Page
{
    class Program
    {
        static void Main()
        {
            string[] array1 = Directory.GetFiles(@"C:KaplanReplies");
            string[] array2 = Directory.GetFiles(@"C:KaplanReplies", "*.REP");
            Console.WriteLine("---Files:---");
            foreach (string name in array1)
            {
                Console.WriteLine(name);
            }
            Console.WriteLine("---REP Files: ---");
            foreach (string name in array2)
            {
                Console.WriteLine(name);
            }
        }
    }
}
  

Комментарии:

1. Вы говорите об имени файла или внутри самого файла.

2. Почему вы пишете на консоль в ASP.Net ?

3. внутри файла. и @SLaks ; да.

4. @javasocute — вы не должны записывать на консоль в классе System.Web.UI.Page, измените свой код, чтобы он имел больше смысла, что именно вы не понимаете в операторах if?

Ответ №1:

Каталог.GetFiles(directoryPath) вернет массив строк, в которых перечислены имена файлов (полные пути) в этом каталоге. Вам придется фактически открывать и читать каждый файл, используя возвращаемый массив строк. Прочитайте каждый файл построчно в цикле и проверьте, начинаются ли какие-либо строки с «LIFT».

Кроме того, способ настройки вашего кода для этой веб-страницы является фанковым. Вы объявляете класс внутри частичного класса страницы. Попробуйте настроить свой код следующим образом:

 public partial class ShippedOrders : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.goFiles();
    }

    public void goFiles()
    {
        string[] array1 = Directory.GetFiles(@"C:KaplanReplies");
        string[] array2 = Directory.GetFiles(@"C:KaplanReplies", "*.REP");
        System.IO.StreamReader file = null;
        string line = "";
        bool hasLIFT = false;

        Response.Write("---Files:---<br/>");
        foreach (string name in array1)
        {
            file = new System.IO.StreamReader(@name);
            while((line = file.ReadLine()) != null)
            {
                if(line.StartsWith("LIFT"))
                {
                    hasLIFT = true;
                    break;
                }
             }
             if(hasLIFT)
             {
                 Response.Write("<span style="color:Red;">"   name   "</span><br/>";
                 hasLIFT = false;
             }
             else
                 Response.Write(name   "<br/>";
        }
        //and can do the same for other array
    }
}
  

Комментарии:

1. while ((строка = reader.ReadLine()) != null) { if (строка. StartsWith(«LIFT»)) Консоль. Цвет переднего плана = консоль. Цвет. Красный; как с кодом shredder, так и с кодом miguels. я на правильном пути с этим?

2. @javasocute смотрите мое обновление. Я изменил запись в консоль, чтобы записать ваш текст в ответ на запрос страницы. это должно помочь вам получить результаты, которые вы ищете

3. @javasocute я сделал еще одно обновление, чтобы помочь вам правильно настроить ваш код в коде за вашей страницей.

4. Спасибо за всю вашу помощь, Шредер, любопытно, почему вы используете response.write вместо console. Я думаю, мне нужно изучить все эти консольные и неконсолидированные вещи.

5. @javasocute Ну, я думаю, это зависит от причины, по которой вы пишете эти имена файлов. Вы даже видите вывод с консоли. WriteLine()? Я думаю, для этого вам нужно настроить пользовательский писатель для консоли. Вы можете использовать System.Diagnostics.Debug.WriteLine("debug statement"); для записи в окно вывода в VS в отладчике. Но Response.Write() независимо от этого вывод отображается прямо на странице.

Ответ №2:

Вы можете изменить цвет вывода консоли с помощью Console.ForegroundColor свойства.

Чтобы узнать, содержит ли файл нужный вам текст, вам нужно открыть его и отсканировать файл.

Затем сделайте это:

 if (fileContainsText) Console.ForegroundColor = ConsoleColor.Red;
else Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine(name);
  

Редактировать

Я не заметил, что вы пытались записать в консоль внутри ASP.NET страница сервера… в этом случае вам нужно сообщить нам, какое приложение вы создаете… это консольное приложение, веб-приложение или веб-сайт… это зависит.

Использование Console не подходит для веб-приложений.

РЕДАКТИРОВАТЬ 2

Кстати, вы можете использовать Console только в консольных приложениях. Консольное приложение — это отдельное приложение Windows, которое отличается от веб-приложения.

Если вы когда-нибудь захотите создать консольное приложение, в окне Нового проекта вы можете найти его в категории Windows, затем вы можете найти тип проекта под названием Консольное приложение.

Ответ №3:

Вы можете сделать это внутри вашего цикла foreach: if(name.contains("LIFT"))
{
//make red.
}

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