W jaki sposób odejmować zmienne?

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
zet120
Wytworny Kaczor
Wytworny Kaczor
Posty: 280
Rejestracja: 31 maja 2008, 07:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

[Solved] Skrypt liczący różnicę czasu.

Post autor: zet120 »

Plik, który służy jak przykład wygląda tak:

Kod: Zaznacz cały

Wschód słońca: 7:08  Zachód słońca: 16:55
jak, czym najprościej odjąć te godziny aby otrzymać długość dnia wyrażoną w godzinach i minutach?
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: W jaki sposób odejmować zmienne?

Post autor: Dwimenor »

łatwiej na minutach policzyć. Zamień to "7:08" na minuty od północy ( 428 ), tak samo dla zachodu. Potem odejmij minuty (zachód-wschód). Wynik przelicz na godziny i minuty.
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: W jaki sposób odejmować zmienne?

Post autor: leon1313 »

Za dużo kombinowania: jeśli odejmiesz minuty, i wyjdzie ci mniej niż 0, to dodaj do nich 60 i odejmij 1 od różnicy w godzinach.
jeśli h1:m1 to wschód, a h2:m2 to zachód to:

Kod: Zaznacz cały

m3=m2-m1; 
jeśli m3<0 to m3=m3+60 i h2=h2-1 ; koniec "jeśli"
h3=h2-h1;
Różnica to h3:m3
:-)
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
Awatar użytkownika
zet120
Wytworny Kaczor
Wytworny Kaczor
Posty: 280
Rejestracja: 31 maja 2008, 07:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: W jaki sposób odejmować zmienne?

Post autor: zet120 »

Hmmm? :-)
A czy mógłbym prosić o odpowiedź zrozumiałą dla przeciętnego "kilkacza"?
Czyli innymi słowy znajdzie się dobra dusza, która jest w stanie skrobnąć odpowiedni skrypt czy też polecenie?

P.S.
Google w tej materii "proponuje" mi kurs programowania w różnych językach, ale to chyba nie dla mnie.
mozg07
Sędziwy Jeż
Sędziwy Jeż
Posty: 36
Rejestracja: 27 wrz 2007, 13:32
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: W jaki sposób odejmować zmienne?

Post autor: mozg07 »

A w czym? Z kontekstu domyślam się, że chodzi o basha, ale pewien nie jestem. I co dokładnie dostaję na wejściu. Taką linię:

Kod: Zaznacz cały

Wschód słońca: 7:08  Zachód słońca: 16:55
czy może po prostu:

Kod: Zaznacz cały

7:08
16:55
czy jeszcze inaczej?
Awatar użytkownika
Struchu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 116
Rejestracja: 23 mar 2008, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: W jaki sposób odejmować zmienne?

Post autor: Struchu »

To ja krótko i perlowato:

Kod: Zaznacz cały

#!/usr/bin/perl -w

my $wejscie = <STDIN>;

if($wejscie =~ /.*?(\d{1,2}):(\d{1,2}).*?(\d{1,2}):(\d{1,2})/ )
{
    my $min = $4 - $2;
    my $hou = 0;
    if($min < 0)
    {
        $min += 60;
        $hou = -1;
    }
    $hou += $3 - $1;

    print "$hou:$min\n";
} else {
    print "Błąd wejścia\n";
}
Przyjmuje wejście postaci:
Wschód słońca: 7:08 Zachód słońca: 16:55
Ma zielone, kocie oczy...
Awatar użytkownika
zet120
Wytworny Kaczor
Wytworny Kaczor
Posty: 280
Rejestracja: 31 maja 2008, 07:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: W jaki sposób odejmować zmienne?

Post autor: zet120 »

Ooo, dzięki za odzew. :-)
Probuję z tym skryptem, ale coś nie chce mnie słuchać. :wink:
Aby wszystko było jasne cały plik wygląda tak:

Kod: Zaznacz cały

09-02-12                      Wschód słońca: 7:04          Zachód słońca: 17:00
                          Dane meteo z godziny 15:43
                                Kierunek wiatru:
  Temp.powietrza: 0.3 °C              WNW                 Wilgotność: 83 %
 Temp.odczuwalna: -2.4 °C                                   Opady: 0.3 mm
                            Prędkość wiatru: 4.0 m/s

       [OutsideTem]                                         [OutsideHum]
                      Ciśnienie: 989.1 hPa Rising Slowly
nazywa się pogoda, a umieszczony jest w ~/test
nUmer
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 26 lut 2009, 19:46
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Kontakt:

Odp: W jaki sposób odejmować zmienne?

Post autor: nUmer »

Kod: Zaznacz cały

#!/bin/sh
wschod=`grep -w "Wschód słońca" "$HOME"/test/pogoda|awk '{printf $4}'`
zachod=`grep -w "Zachód słońca" "$HOME"/test/pogoda|awk '{printf $7}'`

w1=`date --date="$wschod" +"%s"`
z1=`date --date="$zachod" +"%s"`

roznica=$[ z1 - w1 ]
godz=$[ roznica / 3600 ]
min=$[ roznica % 3600 / 60 ]
echo "${godz}h ${min}min"

Awatar użytkownika
zet120
Wytworny Kaczor
Wytworny Kaczor
Posty: 280
Rejestracja: 31 maja 2008, 07:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: W jaki sposób odejmować zmienne?

Post autor: zet120 »

Tytuł wątku zmieniłem mam nadzieję..."na lepszy" :-)

Dzięki kolego nUmer za kolejną propozycję, ale i ta nie chce u mnie działać.
Uruchamiam w konsoli i otrzymuję:

Kod: Zaznacz cały

zet120@zet120-desktop:~$ ~/Skrypty/godz.sh 
/home/zet120/Skrypty/godz.sh: 8: z1: not found
/home/zet120/Skrypty/godz.sh: 9: roznica: not found
/home/zet120/Skrypty/godz.sh: 10: roznica: not found
h min
nUmer
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 26 lut 2009, 19:46
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Kontakt:

Odp: W jaki sposób odejmować zmienne?

Post autor: nUmer »

... musi działać! ;-)
pokaż co wyświetli polecenie

Kod: Zaznacz cały

sh -x /home/zet120/Skrypty/godz.sh
Awatar użytkownika
zet120
Wytworny Kaczor
Wytworny Kaczor
Posty: 280
Rejestracja: 31 maja 2008, 07:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: W jaki sposób odejmować zmienne?

Post autor: zet120 »

Dokładnie to:

Kod: Zaznacz cały

zet120@zet120-desktop:~$ sh -x /home/zet120/Skrypty/godz.sh
+ grep -w Wschód słońca /home/zet120/test/pogoda
+ awk {printf $4}
+ wschod=6:31
+ grep -w Zachód słońca /home/zet120/test/pogoda
+ awk {printf $7}
+ zachod=17:28
+ date --date=6:31 +%s
+ w1=1235799060
+ date --date=17:28 +%s
+ z1=1235838480
+ roznica=$[ z1 - w1 ]
/home/zet120/Skrypty/godz.sh: 1: z1: not found
+ godz=$[ roznica / 3600 ]
/home/zet120/Skrypty/godz.sh: 1: roznica: not found
+ min=$[ roznica % 3600 / 60 ]
/home/zet120/Skrypty/godz.sh: 1: roznica: not found
+ echo h min
h min
zet120@zet120-desktop:~$ 
nUmer
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 26 lut 2009, 19:46
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Kontakt:

Odp: W jaki sposób odejmować zmienne?

Post autor: nUmer »

a spróbuj tak

Kod: Zaznacz cały

#!/bin/bash
wschod=`grep -w "Wschód słońca" "$HOME"/test/pogoda|awk '{printf $4}'`
zachod=`grep -w "Zachód słońca" "$HOME"/test/pogoda|awk '{printf $7}'`

w1=`date --date="$wschod" +"%s"`
z1=`date --date="$zachod" +"%s"`

roznica=$(( z1 - w1 ))
godz=$(( roznica / 3600 ))
min=$(( roznica % 3600 / 60 ))
echo "${godz}h ${min}min"
Godziny pobiera i przetwarza prawidłowo - wydaje się to być jakiś błąd składni.
Jak to nie zadziała, to ja już nic nowego nie wymyślę.
Awatar użytkownika
zet120
Wytworny Kaczor
Wytworny Kaczor
Posty: 280
Rejestracja: 31 maja 2008, 07:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: W jaki sposób odejmować zmienne?

Post autor: zet120 »

Pięknie dziękuję.
Działa! :-)
ithn
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 08 mar 2009, 16:31
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME

Odp: W jaki sposób odejmować zmienne?

Post autor: ithn »

Mam takie pytanie odnośnie polecenia

Kod: Zaznacz cały

sh -x
.
Czy da się w jakiś sposób przekierować wynik działania tego polecenia do pliku, a nie na terminal?
Próbowałem

Kod: Zaznacz cały

sh -x ./skrypt.sh > plik
, ale nie działa.
Awatar użytkownika
rryk
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 206
Rejestracja: 04 mar 2008, 16:00
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: W jaki sposób odejmować zmienne?

Post autor: rryk »

Kod: Zaznacz cały

#!/bin/bash
wschod=`grep -w "Wschód słońca" "$HOME"/test/pogoda|awk '{printf $4}'`
zachod=`grep -w "Zachód słońca" "$HOME"/test/pogoda|awk '{printf $7}'`

w1=`date --date="$wschod" +"%s"`
z1=`date --date="$zachod" +"%s"`

roznica=$(( z1 - w1 ))
godz=$(( roznica / 3600 ))
min=$(( roznica % 3600 / 60 ))
echo "${godz}h ${min}min" > plik
teraz już działa ^^ chociaż nie wiem po co ci wynik zapisywać do pliku
ithn
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 08 mar 2009, 16:31
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME

Odp: W jaki sposób odejmować zmienne?

Post autor: ithn »

Dzięki, ale nie chodziło mi o wynik skryptu powyżej tylko o

Kod: Zaznacz cały

sh -x ./dowolny_skrypt.sh
, które wyświetla w terminalu po kolei co się dzieje w skrypcie.

----------------
\\EDIT - Rozwiązanie problemu

Powyższy problem rozwiązany. Może komuś się to przyda (mnie się przydało :) ).
Są dwa sposoby:
I

Kod: Zaznacz cały

sh -x ./nazwa_skryptu.sh &> jakis_plik.log
II

Kod: Zaznacz cały

script jakis_plik.log [enter]
sh -x ./nazwa_skryptu.sh
[ctrl+d] (przerywa działanie 'script')
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości