| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
KuukausikalenteriZtane 23.11.04 21:56 Funktio, joka palauttaa annetun vuoden annetun kuukauden kalenterin 2-ulotteisena taulukkona + esimerkki.
#!/usr/bin/perl -w # # Copyleft Antti Haapala, tehkää mitä haluatte. # # OK, samanlainen toiminto löytyy kyllä Calendar::Simple -moduulista jne, mutta # oli kyllä pakko tehdä uusi versio, kun tällaista kyseltiin. Demoaa samalla hiukan # mktimen tekemää normalisaatiota, listaoperaatioita ja TMTOWTDI:iä use strict; use POSIX qw(mktime); # palauttaa kuukauden kalenterin kaksiulotteisessa taulukossa # 1. argumentti: vuosi, 1900-alkuinen laskentatapa (1900 = 0, 2000 = 100...) # 2. argumentti: kuukausi 0 - 11 # 3. argumentti: alkaako viikko sunnuntailla (oletus, false) vai maanantailla (true). sub month_calendar($$;$) { my ($year, $month, $mon_starts) = @_; $mon_starts = 0 unless defined $mon_starts; # kuun viimeisen päivän numero on seuraavan kuun päivä numero 0, # kiitos mktimen tekemän normalisoinnin tämä toimii my $lastday = (localtime mktime(0, 0, 0, 0, $month + 1, $year))[3]; # kuukauden ensimmäinen viikonpäivä 0..6, 0 = sunnuntai my $firstdow = (localtime mktime(0, 0, 0, 1, $month, $year))[6]; # ekaksi päddäys. Modulaariaritmetiikkaa... jos maanantai # aloittaa viikon, pitäisi vähentää 1 (mod 7). Valitettavasti # negatiivisilla luvuilla % ei toimi oikein, joten lisätään -1 (mod 7) = 6 (mod 7) my @contents = (undef) x ($mon_starts ? ($firstdow + 6) % 7 : $firstdow); # sitten päivämäärät push @contents, 1 .. $lastday; # palautetaan: jaetaan spliceillä palasiksi, []-operaattorilla palaset # listoiksi ja mapilla näistä kerätään listojen lista. - 0.1 siksi, että # halutaan pyöristää kaikki arvot edelliseen kokonaiseen. Splice # taulukon ulkopuolella palauttaa perlissä undefeja. map [ @contents[$_ * 7 .. $_ * 7 + 6] ], 0 .. (@contents - 0.1) / 7 } # käyttöesimerkki: tulostaa vuoden 2004 kalenterin html-koodina print '<table>'; my $year = 2004; $year -= 1900; for my $mon (0 .. 11) { my @cal = month_calendar $year, $mon, 1; print '<tr>', map("<td>$_</td>", qw(Ma Ti Ke To Pe La Su)), '</tr>'; for (@cal) { print '<tr>'; print '<td>', defined $_ ? $_ : ' ', '</td>' for @$_; print '</tr>'; } print '<tr><td colspan="7"> </td></tr>'; } print '</table>'; Jaenis 11:20 24.11.04 Wau Hiano... Tähän kun vielä pulttaa kylkeen pyhäpäivä-tunnistuksen (vaput,joulut,pääsiäiset,yms kaverit) nii tästähä saa kivan kalenterisoftan. editoitu: 14:47 24.11.04 stWasm1.0 14:46 24.11.04 kun ajan ohjelman se tulostaa tällasta: [root@cable-237-78 root]# perl kalenteri.pl <table><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td> </td><td> </td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td></tr><tr><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td></tr><tr><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td></tr><tr><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td><td>31</td><td> </td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>1</td></tr><tr><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr><tr><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td></tr><tr><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td></tr><tr><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td><td>29</td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td>31</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td> </td><td> </td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td></tr><tr><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td></tr><tr><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td></tr><tr><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td><td> </td><td> </td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td> </td><td> </td><td> </td><td> </td><td>1</td><td>2</td></tr><tr><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr><tr><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td></tr><tr><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td></tr><tr><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td></tr><tr><td>31</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td></tr><tr><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td></tr><tr><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td></tr><tr><td>28</td><td>29</td><td>30</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td> </td><td> </td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td></tr><tr><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td></tr><tr><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td></tr><tr><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td><td>31</td><td> </td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td>1</td></tr><tr><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr><tr><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td></tr><tr><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td></tr><tr><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td><td>29</td></tr><tr><td>30</td><td>31</td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td> </td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr><tr><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td></tr><tr><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td></tr><tr><td>27</td><td>28</td><td>29</td><td>30</td><td> </td><td> </td><td> </td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td> </td><td> </td><td> </td><td>1</td><td>2</td><td>3</td></tr><tr><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td></tr><tr><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td></tr><tr><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td></tr><tr><td>25</td><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td><td>31</td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td colspan="7"> </td></tr><tr><td>Ma</td><td>Ti</td><td>Ke</td><td>To</td><td>Pe</td><td>La</td><td>Su</td></tr><tr><td> </td><td> </td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr><tr><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td></tr><tr><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td></tr><tr><td>27</td><td>28</td><td>29</td><td>30</td><td>31</td><td> </td><td> </td></tr><tr><td colspan="7"> </td></tr></table> [root@cable-237-78 root]# editoitu: 14:53 24.11.04 Ztane 14:52 24.11.04 stWasm1.0 kirjoitti: Tiiäks mitä, sitä sanotaan HyP3RTT3kst m4rk-Up L4ngua63ks.kun ajan ohjelman se tulostaa tällasta: Entropia 15:09 24.11.04 stWasm1.0: perl kalenteri.pl > kalenteri.html Ja sitte laukaiset sen neppiselaimesi ja katsot sitä. Voilá. stWasm1.0 15:54 24.11.04 kiitti! Nyt se toimii renni 00:11 25.11.04 Tablen tyhjiin soluihin kannattaa laittaa välilyönnin tilalle Viikkonumerot ois kiva saada näkyville... d0ggie 01:52 25.11.04 renni kirjoitti: Tablen tyhjiin soluihin kannattaa laittaa välilyönnin tilalle Viikkonumerot ois kiva saada näkyville... Periaatteessa mikäli solun taustaväri ei ole tärkeä (tai se on läpinäkyvä), on viisainta jättää välilyönnyt yms. kokonaan pois ja jättää sisältö tyhjäksi ("<td></td>"). Näin selain tajuaa jättää solun kokonaan piirtämättä. (Luonnollisesti selain laskee solun viemän tilan jne., eli taulukko ei mene rikki.) editoitu: 08:20 25.11.04 Ztane 08:16 25.11.04 renni kirjoitti: Tablen tyhjiin soluihin kannattaa laittaa välilyönnin tilalle oon lisänny nuo ties kuinka monta kertaa... :d Ainaku menee muokkaan koodia, ne häviää :D:D Viikkonumerot ois kiva saada näkyville... Siitä vaan koodaamaan :D renni 15:58 27.11.04 Milläs lelulla oikeen muokkaat jos se tärvelee koodia ja mikset muokkaa suoraan koodia?-) tyhjiin soluihin koska kaikki selaimet ei muuten osaa näyttää taulukkoa nätisti, ainakin kehykset voivat jäädä pois. editoitu: 19:49 27.11.04 Ztane 19:48 27.11.04 renni kirjoitti: Meeppä sinne irkkii ja kuuntele niitä keskusteluja... lelun nimi oli mureakuha -> jääny html-entitiessit vetämättä textareaan. Prkl otan kohta tuon html:n pois tuosta ku ihmiset jaksaa vaa ruikuttaa siitä.Milläs lelulla oikeen muokkaat jos se tärvelee koodia ja mikset muokkaa suoraan koodia?-) |
![]() Haku
|