Работа с файлами: Напишите программу 2

Messages
1,608
Reaction score
288
Website
tehadm.ru

Поиск файла в заданном формате и его обработка​

Данная задача поможет вам разобраться в пакете encoding/csv и path/filepath, хотя для решения может быть использован также пакет archive/zip (поскольку файл с заданием предоставляется именно в этом формате).

В тестовом архиве, который вы можете скачать из нашего репозитория на github.com, содержится набор папок и файлов. Один из этих файлов является файлом с данными в формате CSV, прочие же файлы структурированных данных не содержат.

Требуется найти и прочитать этот единственный файл со структурированными данными (это таблица 10х10, разделителем является запятая), а в качестве ответа необходимо указать число, находящееся на 5 строке и 3 позиции (индексы 4 и 2 соответственно).
 

Attachments

C-like:
package main

import (
    "archive/zip"
    "encoding/csv"
    "fmt"
    "log"
)

func main() {
    r, err := zip.OpenReader("task.zip")
    if err != nil {
        log.Fatal(err)
    }
    defer r.Close()

    for _, f := range r.File {
        if !f.FileInfo().IsDir() {
            file, _ := f.Open()
            csvr := csv.NewReader(file)
            data, err := csvr.ReadAll()
            if err != nil {
                panic(err)
            }
            if len(data) > 1 {
                fmt.Println(data[4][2])
            }
            file.Close()
        }
    }
}
 
C-like:
package main

import (
   "archive/zip"
   "encoding/csv"
   "fmt"
   "os"
)

func main() {

   r, err := zip.OpenReader("task.zip")
   if err != nil {
      fmt.Println(err)
      os.Exit(1)
   }
   defer r.Close()

   for _, f := range r.File {
      if f.FileInfo().IsDir() {
         continue
      }

      rf, err := f.Open()
      
      if err != nil {
         fmt.Println("Wrong open file", f.Name)
         os.Exit(1)
      }
      
      rc := csv.NewReader(rf)
      data, er2 := rc.ReadAll()
      if er2 == nil && len(data) > 1 {
         fmt.Println("Answer: ", data[4][2])
         os.Exit(0)
      }

      rf.Close()
   }

}
 
Back
Top