#vb.net
#vb.net
Вопрос:
Я создаю алгоритм управления диабетом и пытаюсь найти способ, чтобы введенные пользователем временные блоки сохранялись на уровне 4 цифр
Я искал в Google, но все, что я смог найти, это как проверить длину переменной, что я уже знаю, как это сделать.
Sub timeBlocks()
Dim file As String = "C:UsersConnorDocumentsVisual Studio 2017ProjectsmeterCodeMaybeTIMEBLOCKS.txt"
Dim blockNum As Integer
Console.WriteLine("Please be sure to enter times as a 24 hour value, rather than 12 hour, otherwise the input will not be handled.")
Console.Write("Please enter the amount of time blocks you require for your day: ")
blockNum = Console.ReadLine()
Dim timeA(blockNum - 1) As Integer
Dim timeB(blockNum - 1) As Integer
Dim sensitivity(blockNum - 1) As Integer
Dim ratio(blockNum - 1) As Integer
For i = 0 To (blockNum - 1)
Console.WriteLine("Please enter the start time of your time block")
timeA(i) = Console.ReadLine()
Console.WriteLine("Please enter the end time of your time block")
timeB(i) = Console.ReadLine()
Console.WriteLine("Please enter the ratio for this time block (Enter the amount of carbs that go into 1 unit of insulin)")
ratio(i) = Console.ReadLine()
Console.WriteLine("Please enter the insulin sensitivity for this time block
(amount of blood glucose (mmol/L) that is reduced by 1 unit of insulin.)")
sensitivity(i) = Console.ReadLine()
FileOpen(1, file, OpenMode.Append)
PrintLine(1, Convert.ToString(timeA(i)) "-" Convert.ToString(timeB(i)) " 1:" Convert.ToString(ratio(i)) " Insulin Sensitivity:" Convert.ToString(sensitivity(i)) " per mmol/L")
FileClose(1)
Next
End Sub
По сути, я хочу, чтобы пользователь мог ввести 4-значное число для своего временного блока, чтобы оно соответствовало времени 24 часа, поэтому, если они вводят 0000, оно отображается как это, однако оно удаляет все предыдущие 0 и устанавливает его равным только 0.
Комментарии:
1. Возможная проблема,
blockNum = Console.ReadLine()
, что, если вы введете что-то другое, кроме числа? Также ИМХО заглядывает в список (из T)2. Можете ли вы сохранить значение в виде строки, а не целого числа?
3. Это не число, это код . Как номер телефона (не номер). Вам нужна строка.
Ответ №1:
Возможно, дополните число 4 ведущими 0:
Right(String(digits, "0") amp; timeA(i), 4)
Или, в качестве альтернативы, сохраните значение в виде строки, чтобы его можно было распечатать в исходном виде.
Ответ №2:
Я написал функцию для получения 24-часового времени форматирования от пользователя, надеюсь, это поможет:
Public Function Read24HFormatTime() As String
Dim str As String = String.Empty
While True
Dim c As Char = Console.ReadKey(True).KeyChar
If c = vbCr Then Exit While
If c = vbBack Then
If str <> "" Then
str = str.Substring(0, str.Length - 1)
Console.Write(vbBack amp; " " amp; vbBack)
End If
ElseIf str.Length < 5 Then
If Char.IsDigit(c) OrElse c = ":" Then
If str.Length = 0 Then
' allow 0, 1 or 2 only
If c = "0" OrElse c = "1" OrElse c = "2" Then
Console.Write(c)
str = c
End If
ElseIf str.Length = 1 Then
If str = "0" Then
'allow 1 to 9
If c <> ":" Then
If CInt(c.ToString) >= 1 AndAlso CInt(c.ToString) <= 9 Then
Console.Write(c)
str = c
End If
End If
ElseIf str = "1" Then
'allow 0 to 9
If c <> ":" Then
If CInt(c.ToString) >= 0 AndAlso CInt(c.ToString) <= 9 Then
Console.Write(c)
str = c
End If
End If
ElseIf str = "2" Then
'allow 0 to 4
If c <> ":" Then
If CInt(c.ToString) >= 0 AndAlso CInt(c.ToString) <= 4 Then
Console.Write(c)
str = c
End If
End If
End If
ElseIf str.Length = 2 Then
'allow ":" only
If c = ":" Then
Console.Write(c)
str = c
End If
ElseIf str.Length = 3 Then
If str = "24:" Then
'allow 0 only
If c = "0" Then
Console.Write(c)
str = c
End If
Else
'allow 0 to 5
If c <> ":" Then
If CInt(c.ToString) >= 0 AndAlso CInt(c.ToString) <= 5 Then
Console.Write(c)
str = c
End If
End If
End If
ElseIf str.Length = 4 Then
If str.Substring(0, 3) = "24:" Then
'allow 0 only
If c = "0" Then
Console.Write(c)
str = c
End If
Else
'allow 0 to 9
If c <> ":" Then
If CInt(c.ToString) >= 0 AndAlso CInt(c.ToString) <= 9 Then
Console.Write(c)
str = c
End If
End If
End If
End If
End If
End If
End While
Return str
End Function
Пользователь может вводить только время, подобное 23:59
08:15
13:10
, и он не мог вводить такие форматы, как 35:10
90:00
25:13
10:61
Это пример кода, который покажет вам, как его использовать:
Dim myTime = DateTime.Parse(Read24HFormatTime())
Dim name = "Emplyee"
Console.WriteLine($"{vbCrLf}Hello, {name}, at {myTime:t}")
Console.ReadKey(True)