Есть ли способ сохранить длину введенного пользователем номера, чтобы предотвратить удаление лишних 0?

#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)