forked from okolobaxa/cgamos-downloader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ConsoleInputParser.cs
61 lines (51 loc) · 2.11 KB
/
ConsoleInputParser.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
namespace cgamos
{
internal static class ConsoleInputParser
{
public static ArchiveRecord ParseInput()
{
var fond = ParseStringConsoleInput("Фонд #: ", "Неправильный # фонда");
var opis = ParseStringConsoleInput("Опись #: ", "Неправильный # описи");
var delo = ParseStringConsoleInput("Дело #: ", "Неправильный # дела", validateAsNumber: false);
var pageStart = ParseNumberConsoleInput("Лист с: [Нажмити ENTER если 1] ", "Неправильный # листа", 1).Value;
var pageEnd = ParseNumberConsoleInput("Лист по: [Нажмите ENTER если все] ", "Неправильный # листа", defaultValue: null);
return new ArchiveRecord(fond, opis, delo, pageStart, pageEnd);
}
private static short? ParseNumberConsoleInput(string message, string errorMessage, short? defaultValue)
{
while (true)
{
Console.Write(message);
var input = Console.ReadLine();
if (string.IsNullOrEmpty(input))
{
return defaultValue;
}
if (short.TryParse(input, out var number) && number > 0)
{
return number;
}
Console.WriteLine(errorMessage);
}
}
private static string ParseStringConsoleInput(string message, string errorMessage, bool validateAsNumber = true)
{
bool askMore = true;
while (askMore)
{
Console.Write(message); //"Fond #: "
var input = Console.ReadLine();
if (string.IsNullOrEmpty(input) || (validateAsNumber && !short.TryParse(input, out var _)))
{
Console.WriteLine(errorMessage); //"Invalid Fond #"
}
else
{
return input;
}
}
return null;
}
}
}