1
0
Fork 0
mirror of https://github.com/on4kjm/FLEcli.git synced 2025-01-19 05:01:18 +01:00

Added Date field parsing

This commit is contained in:
Jean-Marc MEESSEN 2020-06-09 13:35:34 +02:00
parent 5d2631bb0d
commit 30535269ce
3 changed files with 94 additions and 2 deletions

38
cmd/fle_date.go Normal file
View file

@ -0,0 +1,38 @@
package cmd
/*
Copyright © 2020 Jean-Marc Meessen, ON4KJM <on4kjm@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import (
"strings"
"fmt"
"time"
)
// ValidateDate verifies whether the string is a valid date (YYYY-MM-DD).
func ValidateDate(inputStr string) (ref, errorMsg string) {
const RFC3339FullDate = "2006-01-02"
inputStr = strings.ToUpper(strings.TrimSpace(inputStr))
wrongInputStr := "*" + inputStr
_, err := time.Parse(RFC3339FullDate, inputStr)
if err == nil {
return inputStr, ""
}
return wrongInputStr, fmt.Sprint(err)
}

38
cmd/fle_date_test.go Normal file
View file

@ -0,0 +1,38 @@
package cmd
import "testing"
func TestValidateDate(t *testing.T) {
type args struct {
inputStr string
}
tests := []struct {
name string
args args
wantRef string
wantErrorMsg string
}{
{
"Good date (simple)",
args{ inputStr: "2020-06-10", },
"2020-06-10", "",
},
{
"Bad date (simple)",
args{ inputStr: "2020-13-10", },
"*2020-13-10", "parsing time \"2020-13-10\": month out of range",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotRef, gotErrorMsg := ValidateDate(tt.args.inputStr)
if gotRef != tt.wantRef {
t.Errorf("ValidateDate() gotRef = %v, want %v", gotRef, tt.wantRef)
}
if gotErrorMsg != tt.wantErrorMsg {
t.Errorf("ValidateDate() gotErrorMsg = %v, want %v", gotErrorMsg, tt.wantErrorMsg)
}
})
}
}

View file

@ -84,7 +84,7 @@ func loadFile() {
regexpHeaderMySota, _ := regexp.Compile("(?i)^mysota ")
regexpHeaderQslMsg, _ := regexp.Compile("(?i)^qslmsg ")
regexpHeaderNickname, _ := regexp.Compile("(?i)^nickname ")
// regexpHeaderDate, _ := regexp.Compile("(?i)^date ")
regexpHeaderDate, _ := regexp.Compile("(?i)^date ")
headerMyCall := ""
headerOperator := ""
@ -92,6 +92,7 @@ func loadFile() {
headerMySOTA := ""
headerQslMsg := ""
headerNickname := ""
headerDate := ""
lineCount := 0
var isInMultiLine = false
@ -208,7 +209,7 @@ func loadFile() {
continue
}
//QSL Message
//Nickname
if(regexpHeaderNickname.MatchString(eachline)) {
myNicknameList := regexpHeaderNickname.Split(eachline,-1)
if(len(myNicknameList[1]) > 0) {
@ -219,6 +220,21 @@ func loadFile() {
continue
}
// Date
if(regexpHeaderDate.MatchString(eachline)) {
errorMsg := ""
myDateList := regexpHeaderDate.Split(eachline,-1)
if(len(myDateList[1]) > 0) {
headerDate, errorMsg = ValidateDate(myDateList[1])
cleanedInput = append(cleanedInput, fmt.Sprintf("Date: %s", headerDate))
if(len(errorMsg) != 0) {
errorLog = append(errorLog, fmt.Sprintf("Invalid Date at line %d: %s (%s)",lineCount, myDateList[1], errorMsg))
}
}
//If there is no data after the marker, we just skip the data.
continue
}
// ****
// ** Process the data block
// ****