| package utilities |
| |
| import ( |
| "bufio" |
| "errors" |
| "fmt" |
| "os" |
| "strings" |
| ) |
| |
| // ReadFileToMap reads a text file line by line into a map. For each line |
| // key: first word split by separator, value: rest of line after separator. |
| // Ex: Inputs: textLine: "NAME=Container-Optimized OS", sep: "=" |
| // Outputs: map: {"NAME":"Container-Optimized OS"} |
| // Input: |
| // (string) filePath - The command-line path to the text file |
| // (string) sep - The separator string for the key and value pairs |
| // Output: |
| // (map[string]string) mapOfFile - The map of the read-in text file |
| func ReadFileToMap(filePath, sep string) (map[string]string, error) { |
| file, err := os.Open(filePath) |
| if err != nil { |
| return map[string]string{}, fmt.Errorf("Failed to open file %v: %v", filePath, err) |
| } |
| defer file.Close() |
| |
| mapOfFile := make(map[string]string) |
| scanner := bufio.NewScanner(file) // Read file line by line to fill map |
| for scanner.Scan() { |
| key := strings.Split(string(scanner.Text()[:]), sep)[0] |
| mapOfFile[key] = strings.Split(string(scanner.Text()[:]), sep)[1] |
| } |
| |
| if scanner.Err() != nil { |
| return map[string]string{}, fmt.Errorf("Failed to scan file %v: %v", filePath, scanner.Err()) |
| } |
| return mapOfFile, nil |
| } |
| |
| // CmpMapValues is a helper function that compares a value shared by two maps |
| /// Input: |
| // (map[string]string) map1 - First map to be compared |
| // (map[string]string) map2 - Second map to be compared |
| // (string) key - The key of the value be compared in both maps |
| // Output: |
| // (int) result - -1 for error, 0 for no difference, 1 for difference |
| func CmpMapValues(map1, map2 map[string]string, key string) (int, error) { |
| value1, ok1 := map1[key] |
| value2, ok2 := "", true |
| if len(map2) != 0 { |
| value2, ok2 = map2[key] |
| } |
| |
| if !ok1 || !ok2 { // Error Check: At least one key is not present |
| return -1, errors.New("Error:" + key + " key not found in at least one of the maps") |
| } |
| |
| if value1 != value2 { |
| return 1, nil |
| } |
| return 0, nil |
| } |