Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "encoding/json"
- "fmt"
- "io/ioutil"
- "os"
- "strconv"
- "sync"
- "time"
- )
- var wg sync.WaitGroup
- var workDone int
- type Cars struct {
- Cars []Car `json:"cars"`
- }
- type Car struct {
- Name string `json:"name"`
- Year int `json:"year"`
- Price float32 `json:"price"`
- encryption string
- }
- const file1 string = "IFF7.9_SidaraviciusR_L1_dat_1.json"
- const file2 string = "IFF7.9_SidaraviciusR_L1_dat_2.json"
- const file3 string = "IFF7.9_SidaraviciusR_L1_dat_3.json"
- const filetest string = "cars"
- func main() {
- // 1. Nuskaito duomenuu faila i duomenu struktura
- var carsArray = ReadFromJson(file3)
- //PrintPlayersToConsole(carsArray)
- size := len(carsArray.Cars)
- workingChannel := make(chan Car )
- dataChannel := make(chan Car)
- resultsChannel := make(chan Car,size)
- toMainThread := make(chan Car, size)
- fmt.Println(carsArray)
- // 2.1 Paleidzia 2 darbines gijas:
- go Worker(workingChannel,resultsChannel)
- go Worker(workingChannel,resultsChannel)
- // 2.2 Paleidzia viena duomenu masyva valdancia gija
- go AddDataToWorkingChannels(dataChannel, workingChannel, size)
- // 2.3 Paleidzia viena rezultatu masyva valdancia gija
- go ResultsControl(resultsChannel, toMainThread)
- // 3. Duomenu masyva valdanciai gijai po viena persiuncia visus nuskaitytus elementus is failo
- for _, item := range carsArray.Cars {
- dataChannel <- item
- }
- //var _ = ResultsControl(resultsChannel)
- time.Sleep(time.Millisecond * 2500)
- /*
- for _, item := range results.Cars {
- fmt.Println(item.Name)
- }
- */
- // 4. Is rezultatu masyva valdancios gijos gauna rezultatus.
- var resultArray []Car
- Loop:
- for{
- select{
- case result := <-toMainThread:{
- resultArray = append(resultArray, result)
- fmt.Println(result)
- }
- case <-time.After(2 * time.Second):{
- fmt.Println("DONE")
- break Loop
- }
- }
- }
- // 5. Gautus rezultatus isveda i tekstini faila lentele.
- file, e := os.OpenFile("rez.txt", os.O_CREATE | os.O_WRONLY, 0666)
- if e!= nil{
- fmt.Println(e)
- }else{
- for _, item := range resultArray{
- file.WriteString(toString(item) + " " + item.encryption+"\n")
- }
- }
- file.Close()
- //time.Sleep(time.Millisecond * 2500)
- //byteArray := []byte("Audi")
- //car := <-resultsChannel
- //fmt.Println(stringToBin(car))
- }
- func toString(car Car)(stringed string){
- stringed+= car.Name+" ";
- stringed+= strconv.Itoa(car.Year)+" "
- stringed+= strconv.FormatFloat(float64(car.Price), 'f', -1, 32)
- return
- }
- func stringToBin(car Car) (encrypted string) {
- count := 0
- ones := false
- binString := ""
- encrypted = ""
- s := toString(car)
- for _, c := range s {
- binString = fmt.Sprintf("%08b", byte(c))
- for i:=0;i<len(binString);i++{
- if !ones{
- if binString[i] == '0'{
- count++
- }else{
- encrypted+=strconv.Itoa(count)
- count=1
- ones=true
- }
- }else{
- if binString[i]=='1'{
- count++
- }else{
- encrypted+=strconv.Itoa(count)
- count=1
- ones=false
- }
- }
- }
- }
- return
- }
- // ReadFromJson
- func ReadFromJson(path string) Cars {
- jsonFile, err := os.Open(path)
- if err != nil {
- fmt.Println(err)
- }
- defer jsonFile.Close()
- byteValue, _ := ioutil.ReadAll(jsonFile)
- var carArray Cars
- json.Unmarshal(byteValue, &carArray)
- return carArray
- }
- // created function where data goes from dataChannel to workingChannel
- func AddDataToWorkingChannels(dataChannel <-chan Car, workingChannel chan<- Car, size int) {
- carsArray := make([]Car, (size / 2)) // lokalus masyvas, dydis < n/2
- index := -1
- for {
- var car Car
- if index==-1{ // Jei tuscias
- car = <- dataChannel
- index++
- carsArray[index] = car
- }else if index==(size/2)-1{ // Jei pilnas
- workingChannel <- carsArray[index]
- index--
- }else {
- select {
- case car = <-dataChannel:
- {
- index++
- carsArray[index] = car;
- }
- case workingChannel <- carsArray[index]:
- {
- index--
- }
- }
- }
- }
- }
- func Worker(workingChannel <-chan Car, resultsChannel chan<- Car) {
- for{
- select {
- case player := <-workingChannel:{
- player.encryption=stringToBin(player)
- encr := player.encryption
- if string(encr[0]) == "1"&&string(encr[1]) == "1"&&string(encr[2]) == "4"&&string(encr[3]) == "1"&&string(encr[4]) == "2"{ // B raide
- continue
- }
- resultsChannel <- player
- //fmt.Println(toString(player))
- //fmt.Println("Cars name: "+player.Name)
- //fmt.Println("Car's year: " + strconv.Itoa(player.Year))
- //fmt.Println("Car's price: " + strconv.FormatFloat(float64(player.Price), 'f', -1, 32))
- }
- }
- }
- }
- func ResultsControl(resultsChannel <-chan Car, toMainThread chan<- Car){
- var resultArr []Car
- count:=0
- Loop:
- for{
- select{
- case result := <-resultsChannel:{
- resultArr = append(resultArr, result)
- count++
- }
- case <-time.After(1 * time.Second):{
- fmt.Println(strconv.Itoa(count))
- break Loop
- }
- }
- }
- /*
- for i:=0; i<count; i++{
- result := <-resultsChannel
- resultArr = append(resultArr, result)
- }
- */
- for _, item := range resultArr{
- toMainThread <- item
- }
- //fmt.Println("BROKEN")
- }
- // prints all players
- func PrintPlayersToConsole(carsArray Cars) {
- for i := 0; i < len(carsArray.Cars); i++ {
- fmt.Println("Car's name: " + carsArray.Cars[i].Name)
- fmt.Println("Car's year: " + strconv.Itoa(carsArray.Cars[i].Year))
- fmt.Println("Car's price: " + strconv.FormatFloat(float64(carsArray.Cars[i].Price), 'f', -1, 32))
- }
- }
- ---------------------------------------------------------------------------------------------------------------------------------
- package main
- import (
- "encoding/json"
- "fmt"
- "io/ioutil"
- "os"
- "strconv"
- "sync"
- "time"
- )
- var wg sync.WaitGroup
- var workDone int
- type Cars struct {
- Cars []Car `json:"cars"`
- }
- type Car struct {
- Name string `json:"name"`
- Year int `json:"year"`
- Price float32 `json:"price"`
- encryption string
- }
- const file1 string = "IFF7.9_SidaraviciusR_L1_dat_1.json"
- const file2 string = "IFF7.9_SidaraviciusR_L1_dat_2.json"
- const file3 string = "IFF7.9_SidaraviciusR_L1_dat_3.json"
- const filetest string = "cars"
- func main() {
- // 1. Nuskaito duomenuu faila i duomenu struktura
- var carsArray = ReadFromJson(file3)
- //PrintPlayersToConsole(carsArray)
- size := len(carsArray.Cars)
- workingChannel := make(chan Car )
- dataChannel := make(chan Car)
- resultsChannel := make(chan Car,size)
- toMainThread := make(chan Car, size)
- fmt.Println(carsArray)
- // 2.1 Paleidzia 2 darbines gijas:
- go Worker(workingChannel,resultsChannel)
- go Worker(workingChannel,resultsChannel)
- // 2.2 Paleidzia viena duomenu masyva valdancia gija
- go AddDataToWorkingChannels(dataChannel, workingChannel, size)
- // 2.3 Paleidzia viena rezultatu masyva valdancia gija
- go ResultsControl(resultsChannel, toMainThread)
- // 3. Duomenu masyva valdanciai gijai po viena persiuncia visus nuskaitytus elementus is failo
- for _, item := range carsArray.Cars {
- dataChannel <- item
- }
- //var _ = ResultsControl(resultsChannel)
- time.Sleep(time.Millisecond * 2500)
- /*
- for _, item := range results.Cars {
- fmt.Println(item.Name)
- }
- */
- // 4. Is rezultatu masyva valdancios gijos gauna rezultatus.
- var resultArray []Car
- Loop:
- for{
- select{
- case result := <-toMainThread:{
- resultArray = append(resultArray, result)
- fmt.Println(result)
- }
- case <-time.After(2 * time.Second):{
- fmt.Println("DONE")
- break Loop
- }
- }
- }
- // 5. Gautus rezultatus isveda i tekstini faila lentele.
- file, e := os.OpenFile("rez.txt", os.O_CREATE | os.O_WRONLY, 0666)
- if e!= nil{
- fmt.Println(e)
- }else{
- for _, item := range resultArray{
- file.WriteString(toString(item) + " " + item.encryption+"\n")
- }
- }
- file.Close()
- //time.Sleep(time.Millisecond * 2500)
- //byteArray := []byte("Audi")
- //car := <-resultsChannel
- //fmt.Println(stringToBin(car))
- }
- func toString(car Car)(stringed string){
- stringed+= car.Name+" ";
- stringed+= strconv.Itoa(car.Year)+" "
- stringed+= strconv.FormatFloat(float64(car.Price), 'f', -1, 32)
- return
- }
- func stringToBin(car Car) (encrypted string) {
- count := 0
- ones := false
- binString := ""
- encrypted = ""
- s := toString(car)
- for _, c := range s {
- binString = fmt.Sprintf("%08b", byte(c))
- for i:=0;i<len(binString);i++{
- if !ones{
- if binString[i] == '0'{
- count++
- }else{
- encrypted+=strconv.Itoa(count)
- count=1
- ones=true
- }
- }else{
- if binString[i]=='1'{
- count++
- }else{
- encrypted+=strconv.Itoa(count)
- count=1
- ones=false
- }
- }
- }
- }
- return
- }
- // ReadFromJson
- func ReadFromJson(path string) Cars {
- jsonFile, err := os.Open(path)
- if err != nil {
- fmt.Println(err)
- }
- defer jsonFile.Close()
- byteValue, _ := ioutil.ReadAll(jsonFile)
- var carArray Cars
- json.Unmarshal(byteValue, &carArray)
- return carArray
- }
- // created function where data goes from dataChannel to workingChannel
- func AddDataToWorkingChannels(dataChannel <-chan Car, workingChannel chan<- Car, size int) {
- carsArray := make([]Car, (size / 2)) // lokalus masyvas, dydis < n/2
- index := -1
- for {
- var car Car
- if index==-1{ // Jei tuscias
- car = <- dataChannel
- index++
- carsArray[index] = car
- }else if index==(size/2)-1{ // Jei pilnas
- workingChannel <- carsArray[index]
- index--
- }else {
- select {
- case car = <-dataChannel:
- {
- index++
- carsArray[index] = car;
- }
- case workingChannel <- carsArray[index]:
- {
- index--
- }
- }
- }
- }
- }
- func Worker(workingChannel <-chan Car, resultsChannel chan<- Car) {
- for{
- select {
- case player := <-workingChannel:{
- player.encryption=stringToBin(player)
- encr := player.encryption
- if string(encr[0]) == "1"&&string(encr[1]) == "1"&&string(encr[2]) == "4"&&string(encr[3]) == "1"&&string(encr[4]) == "2"{ // B raide
- continue
- }
- resultsChannel <- player
- //fmt.Println(toString(player))
- //fmt.Println("Cars name: "+player.Name)
- //fmt.Println("Car's year: " + strconv.Itoa(player.Year))
- //fmt.Println("Car's price: " + strconv.FormatFloat(float64(player.Price), 'f', -1, 32))
- }
- }
- }
- }
- func ResultsControl(resultsChannel <-chan Car, toMainThread chan<- Car){
- var resultArr []Car
- count:=0
- Loop:
- for{
- select{
- case result := <-resultsChannel:{
- resultArr = append(resultArr, result)
- count++
- }
- case <-time.After(1 * time.Second):{
- fmt.Println(strconv.Itoa(count))
- break Loop
- }
- }
- }
- /*
- for i:=0; i<count; i++{
- result := <-resultsChannel
- resultArr = append(resultArr, result)
- }
- */
- for _, item := range resultArr{
- toMainThread <- item
- }
- //fmt.Println("BROKEN")
- }
- // prints all players
- func PrintPlayersToConsole(carsArray Cars) {
- for i := 0; i < len(carsArray.Cars); i++ {
- fmt.Println("Car's name: " + carsArray.Cars[i].Name)
- fmt.Println("Car's year: " + strconv.Itoa(carsArray.Cars[i].Year))
- fmt.Println("Car's price: " + strconv.FormatFloat(float64(carsArray.Cars[i].Price), 'f', -1, 32))
- }
- }
- ---------------------------------------------------------------------------------------------------------------------------------
- {
- "cars": [
- {
- "Name": "Bissan",
- "Year": 1992,
- "Price": 3
- },
- {
- "Name": "borsche",
- "Year": 2011,
- "Price": 37
- },
- {
- "Name": "Mitsubishi",
- "Year": 2009,
- "Price": 2
- },
- {
- "Name": "Pontiac",
- "Year": 1984,
- "Price": 75
- },
- {
- "Name": "Suzuki",
- "Year": 1993,
- "Price": 85
- },
- {
- "Name": "Toyota",
- "Year": 2006,
- "Price": 7
- },
- {
- "Name": "Kia",
- "Year": 2009,
- "Price": 42
- },
- {
- "Name": "Scion",
- "Year": 2011,
- "Price": 23
- },
- {
- "Name": "Lincoln",
- "Year": 1989,
- "Price": 93
- },
- {
- "Name": "Mercedes-Benz",
- "Year": 2011,
- "Price": 38
- }
- ]
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement