rummer Ответов: 2

Получить устаревшее имя сервера из текстового файла


Найдите устаревшие серверы из списка серверов.

Возьмите входной файл как serverList.txt. В дата-центре есть несколько серверов. Вся информация о программном обеспечении, установленном на нескольких серверах, сохраняется в этом файле.

Например, информация о программном обеспечении, сохраненная в файле, выглядит следующим образом.

Сервер1, База Данных, MySQL, 5.5
Сервер2, База Данных, MySQL, 5.1
Server3, OS, Ubuntu, 10.04
Сервер1, ОС, Убунту 12.04
Сервер2, ОС, Убунту 12.04
Server3, Язык, Python, 2.6.3

Этот файл указывает, что на сервере 1 установлена версия 5.5 MySQL, на сервере 2 установлена версия 5.1, а на сервере 3 установлена версия 10.04 Ubuntu. Для этой программы все номера версий имеют вид X. Y или X. Y. Z, где X, Y и Z состоят только из цифр.

Напишите программу, которая читает этот файл и печатает список имен серверов, имеющих по крайней мере одну установку программного обеспечения, которая является устаревшей версией.

Таким образом, в этом случае вывод вашей программы должен быть:

Сервер2
Сервер 3

Что я уже пробовал:

var list = new List<string>();
        //string strFileContent = string.Empty;
        using (StreamReader sr = new StreamReader(@"D:\input.txt"))
        {
            string Line;
            while ((Line = sr.ReadLine()) != null)
            {
                //strFileContent += Line + ",";
                list.Add(Line);
            }
        }


EDIT (CHill60): OP продвинул код дальше...
Цитата:
пробовали до сих пор потом застряли -
var list = new List<string>();
 //string strFileContent = string.Empty;


 Dictionary<string, string> latestVersion = new Dictionary<string, string>();
 using (StreamReader sr = new StreamReader(@"D:\input.txt"))
 {
     string Line;
     while ((Line = sr.ReadLine()) != null)
     {
         //strFileContent += Line + ",";
         list.Add(Line);
     }
 }
 string str = string.Empty;
 for (int i = 0; i <= list.Count; i++)
 {
     str = list[i].ToString();

     string[] stt = str.Split(',');

     for (int j = 0; j <= stt.Length; j++)
     {


     }
 }

F-ES Sitecore

Как только у вас есть "линия", вы можете использовать строку.Разделите с помощью запятой, чтобы получить соответствующие значения в массив, а затем обработать этот массив. Google "c# string split" для примера кода.

2 Ответов

Рейтинг:
1

Maciej Los

Примечание: Я полностью согласен с CHill60[^], потому что нет другого способа научиться программированию, как начать программировать.

Несколько советов:
1. Чтение текстового файла: Файл.Метод ReadAllLines (System.IO)[^]

string[] lines = File.ReadAllLines("FullFileName.txt");

2. Разделяющую текст: Строка.Метод Разделения (String[], StringSplitOptions) (System)[^]
3. пользовательский класс для хранения деталей программного обеспечения: Классы (Руководство По Программированию На C#) | Microsoft Docs[^]
Примечание: конструктор вашего класса должен принимать текст, разделенный запятыми (одна строка)
public class SoftwareStorage
{
	private string sMachineName = string.Empty;
	private string sSoftwareType = string.Empty;
	private string sSoftwareName = string.Empty;
	private Version oSoftwateVersion = null;

	public SoftwareStorage(string delimitedText)
	{
		string[] parts = delimitedText.Split(new string[]{", "}, StringSplitOptions.RemoveEmptyEntries);
		sMachineName = parts[0];
		sSoftwareType = parts[1];
		sSoftwareName = parts[2];
		oSoftwateVersion = new Version(parts[3]); //see point 4.
	}
    //other members of class here
}

4. Программное обеспечение контроля версий : Класс Версии (Система)[^]
Этот класс предоставляет несколько методов для сравнения версий программного обеспечения.

Удачи вам!


Рейтинг:
0

CHill60

Домашние задания и упражнения задаются преподавателями, чтобы помочь вам учиться. Они дают вам возможность применять и практиковать методы, которым вас учат.

Поэтому, даже если вы действительно задали вопрос, мы не будем делать за вас домашнее задание. Это действительно не поможет вам вообще.

Подсказки: Код, который вы разместили, читает файл, но вы ничего не делаете со списком строк и не сравниваете содержимое каждой строки ни с чем.

Продолжайте пытаться, напишите остальную часть кода и вернитесь, если вы застряли.

[EDIT - добавление дополнительных подсказок по мере того, как OP продвинул свой код немного дальше]

Поскольку я собираюсь предложить вам изучить ценности вещей, вы найдете эту статью полезной: Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Вы воспользовались советом @F-ES_Sitecore и использовали его Split чтобы получить отдельные компоненты каждой строки. Если вы поставите точку останова на линии

for (int j = 0; j <= stt.Length; j++)
и изучите свой массив stt вы заметите, что для всех линий
stt[0] contains the Server name - Server1, Server2, etc
stt[1] contains the "type" - Database, OS, Language
stt[2] contains the name of the actual thing of type stt[1] - MySQL, Ubuntu, Python
stt[3] contains the version number
Так что вам действительно не нужно использовать этот for-loop j, вы можете просто посмотреть непосредственно на точное местоположение для получения информации, которую вы собираетесь проверить.

У вас уже есть определенный словарь latestVersion но вам нужно заполнить это, вероятно, используя Метод add[^]. Просто жестко Закодируйте значения на данный момент, пока вы не получите что-то работающее.

Для каждой строки вы будете хотеть "поиск" stt[2] в вашем словаре и сравните stt[3] со значением в словаре. Если они не совпадают то этот сервер (stt[0]) должен быть добавлен к вашему выходу. Я предлагаю использовать Метод TryGetValue[^]

Давай попробуем и посмотрим как ты справишься


Maciej Los

5ed!

rummer

CHill60 я пытался, но не получил того, что мне было нужно, поэтому разместил здесь.

rummer

Я пробовал до сих пор, а потом застрял -

var list = новый список<string>();
//string strFileContent = строка.Пустой;


Словарь&ЛТ;строку, строку&ГТ; последнюю версию = новый словарь&ЛТ;строку, строку&ГТ;();
использование (StreamReader sr = new StreamReader(@"D:\input.txt"))
{
строки;
в то время как ((строка = СР.С readline()) != нуль)
{
//strFileContent += строка + ",";
список.Добавить(Строка);
}
}
string str = строка.Пустой;
for (int i = 0; i <= list.Граф; i++)
{
str = Список[i].Метод toString();

string[] stt = str.Split(',');

for (int j = 0; j <= stt.Длина; j++)
{


}
}