Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 11.90 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "encoding/json"
  5.     "fmt"
  6.     "io/ioutil"
  7.     "os"
  8.     "strconv"
  9.     "sync"
  10.     "time"
  11. )
  12.  
  13. var wg sync.WaitGroup
  14. var workDone int
  15.  
  16. type Cars struct {
  17.     Cars []Car `json:"cars"`
  18. }
  19. type Car struct {
  20.     Name string  `json:"name"`
  21.     Year int     `json:"year"`
  22.     Price float32 `json:"price"`
  23.     encryption string
  24. }
  25.  
  26. const file1 string = "IFF7.9_SidaraviciusR_L1_dat_1.json"
  27. const file2 string = "IFF7.9_SidaraviciusR_L1_dat_2.json"
  28. const file3 string = "IFF7.9_SidaraviciusR_L1_dat_3.json"
  29. const filetest string = "cars"
  30.  
  31. func main() {
  32.      // 1. Nuskaito duomenuu faila i duomenu struktura
  33.     var carsArray = ReadFromJson(file3)
  34.     //PrintPlayersToConsole(carsArray)
  35.     size := len(carsArray.Cars)
  36.     workingChannel := make(chan Car )
  37.     dataChannel := make(chan Car)
  38.     resultsChannel := make(chan Car,size)
  39.     toMainThread := make(chan Car, size)
  40.  
  41.     fmt.Println(carsArray)
  42.  
  43.     // 2.1 Paleidzia 2 darbines gijas:
  44.     go Worker(workingChannel,resultsChannel)
  45.     go Worker(workingChannel,resultsChannel)
  46.  
  47.     // 2.2 Paleidzia viena duomenu masyva valdancia gija
  48.     go AddDataToWorkingChannels(dataChannel, workingChannel, size)
  49.  
  50.     // 2.3 Paleidzia viena rezultatu masyva valdancia gija
  51.     go ResultsControl(resultsChannel, toMainThread)
  52.  
  53.     // 3. Duomenu masyva valdanciai gijai po viena persiuncia visus nuskaitytus elementus is failo
  54.     for _, item := range carsArray.Cars {
  55.         dataChannel <- item
  56.     }
  57.  
  58.  
  59.  
  60.  
  61.  
  62.     //var _ = ResultsControl(resultsChannel)
  63.  
  64.     time.Sleep(time.Millisecond * 2500)
  65.     /*
  66.     for _, item := range results.Cars {
  67.         fmt.Println(item.Name)
  68.     }
  69.      */
  70.  
  71.     // 4. Is rezultatu masyva valdancios gijos gauna rezultatus.
  72.     var resultArray []Car
  73. Loop:
  74.     for{
  75.         select{
  76.         case result := <-toMainThread:{
  77.             resultArray = append(resultArray, result)
  78.             fmt.Println(result)
  79.         }
  80.         case <-time.After(2 * time.Second):{
  81.             fmt.Println("DONE")
  82.             break Loop
  83.         }
  84.         }
  85.     }
  86.  
  87.  
  88.     // 5. Gautus rezultatus isveda i tekstini faila lentele.
  89.     file, e := os.OpenFile("rez.txt", os.O_CREATE | os.O_WRONLY, 0666)
  90.     if e!= nil{
  91.         fmt.Println(e)
  92.     }else{
  93.         for _, item := range resultArray{
  94.             file.WriteString(toString(item) + " " + item.encryption+"\n")
  95.         }
  96.     }
  97.     file.Close()
  98.     //time.Sleep(time.Millisecond * 2500)
  99.     //byteArray := []byte("Audi")
  100.     //car := <-resultsChannel
  101.     //fmt.Println(stringToBin(car))
  102. }
  103.  
  104. func toString(car Car)(stringed string){
  105.     stringed+= car.Name+" ";
  106.     stringed+= strconv.Itoa(car.Year)+" "
  107.     stringed+= strconv.FormatFloat(float64(car.Price), 'f', -1, 32)
  108.     return
  109. }
  110.  
  111. func stringToBin(car Car) (encrypted string) {
  112.     count := 0
  113.     ones := false
  114.     binString := ""
  115.     encrypted = ""
  116.  
  117.     s := toString(car)
  118.  
  119.     for _, c := range s {
  120.         binString = fmt.Sprintf("%08b", byte(c))
  121.         for i:=0;i<len(binString);i++{
  122.             if !ones{
  123.                 if binString[i] == '0'{
  124.                     count++
  125.                 }else{
  126.                     encrypted+=strconv.Itoa(count)
  127.                     count=1
  128.                     ones=true
  129.                 }
  130.             }else{
  131.                 if binString[i]=='1'{
  132.                     count++
  133.                 }else{
  134.                     encrypted+=strconv.Itoa(count)
  135.                     count=1
  136.                     ones=false
  137.                 }
  138.             }
  139.         }
  140.     }
  141.     return
  142. }
  143.  
  144. // ReadFromJson
  145. func ReadFromJson(path string) Cars {
  146.     jsonFile, err := os.Open(path)
  147.     if err != nil {
  148.         fmt.Println(err)
  149.     }
  150.     defer jsonFile.Close()
  151.     byteValue, _ := ioutil.ReadAll(jsonFile)
  152.     var carArray Cars
  153.     json.Unmarshal(byteValue, &carArray)
  154.     return carArray
  155. }
  156. // created function where data goes from dataChannel to workingChannel
  157. func AddDataToWorkingChannels(dataChannel <-chan Car, workingChannel chan<- Car, size int) {
  158.     carsArray := make([]Car, (size / 2)) // lokalus masyvas, dydis < n/2
  159.     index := -1
  160.     for {
  161.         var car Car
  162.         if index==-1{ // Jei tuscias
  163.             car = <- dataChannel
  164.             index++
  165.             carsArray[index] = car
  166.         }else if index==(size/2)-1{ // Jei pilnas
  167.             workingChannel <- carsArray[index]
  168.             index--
  169.         }else {
  170.             select {
  171.             case car = <-dataChannel:
  172.                 {
  173.                     index++
  174.                     carsArray[index] = car;
  175.                 }
  176.             case workingChannel <- carsArray[index]:
  177.                 {
  178.                     index--
  179.                 }
  180.             }
  181.         }
  182.     }
  183. }
  184. func Worker(workingChannel <-chan Car, resultsChannel chan<- Car) {
  185.     for{
  186.         select {
  187.         case player := <-workingChannel:{
  188.             player.encryption=stringToBin(player)
  189.             encr := player.encryption
  190.             if string(encr[0]) == "1"&&string(encr[1]) == "1"&&string(encr[2]) == "4"&&string(encr[3]) == "1"&&string(encr[4]) == "2"{ // B raide
  191.  
  192.                 continue
  193.             }
  194.             resultsChannel <- player
  195.             //fmt.Println(toString(player))
  196.             //fmt.Println("Cars name: "+player.Name)
  197.             //fmt.Println("Car's year:  " + strconv.Itoa(player.Year))
  198.             //fmt.Println("Car's price: " + strconv.FormatFloat(float64(player.Price), 'f', -1, 32))
  199.         }
  200.         }
  201.     }
  202.  
  203.  
  204. }
  205. func ResultsControl(resultsChannel <-chan Car, toMainThread chan<- Car){
  206.     var resultArr []Car
  207.  
  208.     count:=0
  209.     Loop:
  210.         for{
  211.             select{
  212.             case result := <-resultsChannel:{
  213.                 resultArr = append(resultArr, result)
  214.                 count++
  215.             }
  216.             case <-time.After(1 * time.Second):{
  217.                 fmt.Println(strconv.Itoa(count))
  218.                 break Loop
  219.             }
  220.             }
  221.         }
  222.  
  223. /*
  224.     for i:=0; i<count; i++{
  225.         result := <-resultsChannel
  226.         resultArr = append(resultArr, result)
  227.     }
  228. */
  229.     for _, item := range resultArr{
  230.         toMainThread <- item
  231.     }
  232.     //fmt.Println("BROKEN")
  233. }
  234.  
  235. // prints all players
  236. func PrintPlayersToConsole(carsArray Cars) {
  237.     for i := 0; i < len(carsArray.Cars); i++ {
  238.         fmt.Println("Car's name: " + carsArray.Cars[i].Name)
  239.         fmt.Println("Car's year:  " + strconv.Itoa(carsArray.Cars[i].Year))
  240.         fmt.Println("Car's price: " + strconv.FormatFloat(float64(carsArray.Cars[i].Price), 'f', -1, 32))
  241.     }
  242. }
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254. ---------------------------------------------------------------------------------------------------------------------------------
  255.  
  256. package main
  257.  
  258. import (
  259.     "encoding/json"
  260.     "fmt"
  261.     "io/ioutil"
  262.     "os"
  263.     "strconv"
  264.     "sync"
  265.     "time"
  266. )
  267.  
  268. var wg sync.WaitGroup
  269. var workDone int
  270.  
  271. type Cars struct {
  272.     Cars []Car `json:"cars"`
  273. }
  274. type Car struct {
  275.     Name string  `json:"name"`
  276.     Year int     `json:"year"`
  277.     Price float32 `json:"price"`
  278.     encryption string
  279. }
  280.  
  281. const file1 string = "IFF7.9_SidaraviciusR_L1_dat_1.json"
  282. const file2 string = "IFF7.9_SidaraviciusR_L1_dat_2.json"
  283. const file3 string = "IFF7.9_SidaraviciusR_L1_dat_3.json"
  284. const filetest string = "cars"
  285.  
  286. func main() {
  287.  
  288.      // 1. Nuskaito duomenuu faila i duomenu struktura
  289.     var carsArray = ReadFromJson(file3)
  290.    
  291.     //PrintPlayersToConsole(carsArray)
  292.     size := len(carsArray.Cars)
  293.     workingChannel := make(chan Car )
  294.     dataChannel := make(chan Car)
  295.     resultsChannel := make(chan Car,size)
  296.     toMainThread := make(chan Car, size)
  297.  
  298.     fmt.Println(carsArray)
  299.  
  300.     // 2.1 Paleidzia 2 darbines gijas:
  301.     go Worker(workingChannel,resultsChannel)
  302.     go Worker(workingChannel,resultsChannel)
  303.  
  304.     // 2.2 Paleidzia viena duomenu masyva valdancia gija
  305.     go AddDataToWorkingChannels(dataChannel, workingChannel, size)
  306.  
  307.     // 2.3 Paleidzia viena rezultatu masyva valdancia gija
  308.     go ResultsControl(resultsChannel, toMainThread)
  309.  
  310.     // 3. Duomenu masyva valdanciai gijai po viena persiuncia visus nuskaitytus elementus is failo
  311.     for _, item := range carsArray.Cars {
  312.         dataChannel <- item
  313.     }
  314.  
  315.  
  316.  
  317.  
  318.  
  319.     //var _ = ResultsControl(resultsChannel)
  320.  
  321.     time.Sleep(time.Millisecond * 2500)
  322.     /*
  323.     for _, item := range results.Cars {
  324.         fmt.Println(item.Name)
  325.     }
  326.      */
  327.  
  328.     // 4. Is rezultatu masyva valdancios gijos gauna rezultatus.
  329.     var resultArray []Car
  330. Loop:
  331.     for{
  332.         select{
  333.         case result := <-toMainThread:{
  334.             resultArray = append(resultArray, result)
  335.             fmt.Println(result)
  336.         }
  337.         case <-time.After(2 * time.Second):{
  338.             fmt.Println("DONE")
  339.             break Loop
  340.         }
  341.         }
  342.     }
  343.  
  344.  
  345.     // 5. Gautus rezultatus isveda i tekstini faila lentele.
  346.     file, e := os.OpenFile("rez.txt", os.O_CREATE | os.O_WRONLY, 0666)
  347.     if e!= nil{
  348.         fmt.Println(e)
  349.     }else{
  350.         for _, item := range resultArray{
  351.             file.WriteString(toString(item) + " " + item.encryption+"\n")
  352.         }
  353.     }
  354.     file.Close()
  355.     //time.Sleep(time.Millisecond * 2500)
  356.     //byteArray := []byte("Audi")
  357.     //car := <-resultsChannel
  358.     //fmt.Println(stringToBin(car))
  359. }
  360.  
  361. func toString(car Car)(stringed string){
  362.     stringed+= car.Name+" ";
  363.     stringed+= strconv.Itoa(car.Year)+" "
  364.     stringed+= strconv.FormatFloat(float64(car.Price), 'f', -1, 32)
  365.     return
  366. }
  367.  
  368. func stringToBin(car Car) (encrypted string) {
  369.     count := 0
  370.     ones := false
  371.     binString := ""
  372.     encrypted = ""
  373.  
  374.     s := toString(car)
  375.  
  376.     for _, c := range s {
  377.         binString = fmt.Sprintf("%08b", byte(c))
  378.         for i:=0;i<len(binString);i++{
  379.             if !ones{
  380.                 if binString[i] == '0'{
  381.                     count++
  382.                 }else{
  383.                     encrypted+=strconv.Itoa(count)
  384.                     count=1
  385.                     ones=true
  386.                 }
  387.             }else{
  388.                 if binString[i]=='1'{
  389.                     count++
  390.                 }else{
  391.                     encrypted+=strconv.Itoa(count)
  392.                     count=1
  393.                     ones=false
  394.                 }
  395.             }
  396.         }
  397.     }
  398.     return
  399. }
  400.  
  401. // ReadFromJson
  402. func ReadFromJson(path string) Cars {
  403.     jsonFile, err := os.Open(path)
  404.     if err != nil {
  405.         fmt.Println(err)
  406.     }
  407.     defer jsonFile.Close()
  408.     byteValue, _ := ioutil.ReadAll(jsonFile)
  409.     var carArray Cars
  410.     json.Unmarshal(byteValue, &carArray)
  411.     return carArray
  412. }
  413. // created function where data goes from dataChannel to workingChannel
  414. func AddDataToWorkingChannels(dataChannel <-chan Car, workingChannel chan<- Car, size int) {
  415.     carsArray := make([]Car, (size / 2)) // lokalus masyvas, dydis < n/2
  416.     index := -1
  417.     for {
  418.         var car Car
  419.         if index==-1{ // Jei tuscias
  420.             car = <- dataChannel
  421.             index++
  422.             carsArray[index] = car
  423.         }else if index==(size/2)-1{ // Jei pilnas
  424.             workingChannel <- carsArray[index]
  425.             index--
  426.         }else {
  427.             select {
  428.             case car = <-dataChannel:
  429.                 {
  430.                     index++
  431.                     carsArray[index] = car;
  432.                 }
  433.             case workingChannel <- carsArray[index]:
  434.                 {
  435.                     index--
  436.                 }
  437.             }
  438.         }
  439.     }
  440. }
  441. func Worker(workingChannel <-chan Car, resultsChannel chan<- Car) {
  442.     for{
  443.         select {
  444.         case player := <-workingChannel:{
  445.             player.encryption=stringToBin(player)
  446.             encr := player.encryption
  447.             if string(encr[0]) == "1"&&string(encr[1]) == "1"&&string(encr[2]) == "4"&&string(encr[3]) == "1"&&string(encr[4]) == "2"{ // B raide
  448.  
  449.                 continue
  450.             }
  451.             resultsChannel <- player
  452.             //fmt.Println(toString(player))
  453.             //fmt.Println("Cars name: "+player.Name)
  454.             //fmt.Println("Car's year:  " + strconv.Itoa(player.Year))
  455.             //fmt.Println("Car's price: " + strconv.FormatFloat(float64(player.Price), 'f', -1, 32))
  456.         }
  457.         }
  458.     }
  459.  
  460.  
  461. }
  462. func ResultsControl(resultsChannel <-chan Car, toMainThread chan<- Car){
  463.     var resultArr []Car
  464.  
  465.     count:=0
  466.     Loop:
  467.         for{
  468.             select{
  469.             case result := <-resultsChannel:{
  470.                 resultArr = append(resultArr, result)
  471.                 count++
  472.             }
  473.             case <-time.After(1 * time.Second):{
  474.                 fmt.Println(strconv.Itoa(count))
  475.                 break Loop
  476.             }
  477.             }
  478.         }
  479.  
  480. /*
  481.     for i:=0; i<count; i++{
  482.         result := <-resultsChannel
  483.         resultArr = append(resultArr, result)
  484.     }
  485. */
  486.     for _, item := range resultArr{
  487.         toMainThread <- item
  488.     }
  489.     //fmt.Println("BROKEN")
  490. }
  491.  
  492. // prints all players
  493. func PrintPlayersToConsole(carsArray Cars) {
  494.     for i := 0; i < len(carsArray.Cars); i++ {
  495.         fmt.Println("Car's name: " + carsArray.Cars[i].Name)
  496.         fmt.Println("Car's year:  " + strconv.Itoa(carsArray.Cars[i].Year))
  497.         fmt.Println("Car's price: " + strconv.FormatFloat(float64(carsArray.Cars[i].Price), 'f', -1, 32))
  498.     }
  499. }
  500.  
  501.  
  502.  
  503. ---------------------------------------------------------------------------------------------------------------------------------
  504.  
  505.  
  506. {
  507.     "cars": [
  508.   {
  509.     "Name": "Bissan",
  510.     "Year": 1992,
  511.     "Price": 3
  512.   },
  513.   {
  514.     "Name": "borsche",
  515.     "Year": 2011,
  516.     "Price": 37
  517.   },
  518.   {
  519.     "Name": "Mitsubishi",
  520.     "Year": 2009,
  521.     "Price": 2
  522.   },
  523.   {
  524.     "Name": "Pontiac",
  525.     "Year": 1984,
  526.     "Price": 75
  527.   },
  528.   {
  529.     "Name": "Suzuki",
  530.     "Year": 1993,
  531.     "Price": 85
  532.   },
  533.   {
  534.     "Name": "Toyota",
  535.     "Year": 2006,
  536.     "Price": 7
  537.   },
  538.   {
  539.     "Name": "Kia",
  540.     "Year": 2009,
  541.     "Price": 42
  542.   },
  543.   {
  544.     "Name": "Scion",
  545.     "Year": 2011,
  546.     "Price": 23
  547.   },
  548.   {
  549.     "Name": "Lincoln",
  550.     "Year": 1989,
  551.     "Price": 93
  552.   },
  553.   {
  554.     "Name": "Mercedes-Benz",
  555.     "Year": 2011,
  556.     "Price": 38
  557.   }
  558. ]
  559. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement