Pieniä kysymyksiä ohjelmoinnista

Viestiketju alueella 'Ohjelmointi, pelikehitys ja muu sovelluskehitys' , aloittaja Kautium, 17.10.2016.

  1. Hessu

    Hessu Tukijäsen

    Viestejä:
    2 713
    Rekisteröitynyt:
    29.10.2016
    Or löytyy kyllä, mutta valitti syntaksista eilen jotain. Tuota unionia täytyy kokeilla.

    Edit: Union näyttäisi toimivan juuri kuten on haluttukin. Kiitokset. :tup:
     
    Viimeksi muokattu: 11.05.2018
  2. Nigel

    Nigel

    Viestejä:
    189
    Rekisteröitynyt:
    23.10.2016
    Osaisiko joku jeesata tämän Python-ongelman kanssa:

    Koodi:
            ls_comp = ls[:]
            for item in ls_comp:
                if len(item) > 3:
                    item2 = item[:]
                    item.append('00:00')
                    item2.insert(3, '00:00')
                    for ele, ele2 in zip(item[3:], item2[3:]):
                        t = time_operator(ele, ele2, '-')
                        s = int(t[:2]) * 60 * 60 + int(t[3:5]) * 60
                        if s < 180:
                            pass
    ls on lista, joka pitää sisällään ison joukon listoja, joissa jokaisessa on 3-10 itemiä. Käytän tätä koodin pätkää vertaamaan listoissa olevia HH:MM-muotoisia kellonaikoja toisiinsa. Koodi ei ole valmis, koska tuosta lopussa olevasta if-lauseesta puuttuu vielä sisältö. Tarkoitus on poistaa listoista itemit, jotka ovat alle kolmen minuutin päästä toisistaan.

    Koodi toimii tuohon if-lauseeseen asti hyvin, mutta jostain syystä "item.append('00:00')" joutuu myös ls-listaan. Ekalla rivillä otan ls-listasta kopion, mutta ja kaiken järjen mukaan tuon append-komennon pitäisi vaikuttaa vain siihen. Jostain syystä kuitenkin jos tulostan ls-listan tuon koodin jälkeen, niin jokaiseen listaan on ilmestynyt viimeiseksi itemiksi '00:00'.

    Jaksaisiko joku jeesiä? :tdown:

    Ne ls-listan sisältämät listat on suunnilleen tällaisia:
    Koodi:
    ['0001603269', 'XX', '12', '07:50', '12:35', '13:20', '17:05']
    ['0001603269', 'XX', '13', '07:51', '12:34', '13:23', '17:04']
    ['0001603269', 'XX', '14', '07:53', '12:33', '13:23', '17:25']
    ['0001603269', 'XX', '15', '07:51', '12:33', '13:23', '17:05']
    ['0001603269', 'XX', '16', '07:47', '12:33', '13:23', '17:04']
    Koodauskokemukseni on nyt pari kuukautta Pythonilla leikkimistä ilman mitään aiempaa kokemusta, joten jos koodi näyttää hirveältä, niin juuri nyt haluisin keskittyä enemmän tuon ongelman ratkaisuun.
     
  3. Barbarossa

    Barbarossa

    Viestejä:
    235
    Rekisteröitynyt:
    17.10.2016
    Arvatenkin slice-operaatio tuottaa ns. shallow copyn, eli listasta tehdään kopio mutta sisällön elementit osoittavat muistissa alkuperäisiin. Deep copyn tekeminen onnistunee ainakin copy-modulilla.
     
    Nigel tykkää tästä.
  4. Nigel

    Nigel

    Viestejä:
    189
    Rekisteröitynyt:
    23.10.2016
    Kiitos. Tuolla deepcopylla lähti toimimaan. Täytyy näköjään olla varovaisempi kopioinnin kanssa. Olin jo koittanut näitä vaihtoehtoja:

    • ls_comp = list(ls)
    • ls_comp = ls[:]
    mutta nuo kai sitten aina tekee sellaisen shallow copyn... Googlatessa tuli vastaan vain nuo vaihtoehdot ja olin ymmärtänyt, että ne nimen omaan luovat ihan erillisen listan.

    Toimiva komento on siis:

    • ls_comp = copy.deepcopy(ls)
     
  5. Kaitzschu

    Kaitzschu

    Viestejä:
    210
    Rekisteröitynyt:
    18.10.2016
    Nuo luovat erillisen listan, eli ls_comp:n muokkaaminen ei vaikuta ls:ään. Tämä ongelma syntyi siitä, että ls-listan jäsenet itsessään ovat listoja, joten ilman syväkopiointia ne kopioituivat viittauksina ja niiden muokkaaminen vaikutti tietysti alkuperäisen listan jäseniin.
     
  6. Nigel

    Nigel

    Viestejä:
    189
    Rekisteröitynyt:
    23.10.2016
    Juu no nyt kun sanoit tuon ääneen, niin yhtäkkiä tuntuu ihan itsestäänselvältä, että noin sen pitää mennä. :)
     
  7. Dradge

    Dradge

    Viestejä:
    7
    Rekisteröitynyt:
    31.01.2018
    Vinkilläsi pääsin niin pitkälle että nyt raidoitus toimii filteröinnin kera. Mutta nyt ongelmaksi muodostui piilotettujen alkioiden palauttaminen kun filteristä poistaa kirjaimia. Joku pikkuvirhe tuossa ilmeisesti on :btooth:

    Edit: Siis filteröinti toimii mutta jos pyyhin filtterin input kentästä kaiken tekstin pois pitäisi näkyä koko lista mutta jostain syystä häviää kaikki alkiot listasta :itku:
    [ Vain rekisteröityneet käyttäjät näkevät Spoiler-tagin sisällön. Rekisteröidy foorumille... ]
     
    Viimeksi muokattu: 16.05.2018
  8. TheMeII

    TheMeII echo "%0|%0">s.bat|s Tukijäsen

    Viestejä:
    2 550
    Rekisteröitynyt:
    13.11.2016
    Käytä vikassa elsessä kun haku on 0merkkinen trs muuttujaa tr:n sijaan?
     
  9. Paapaa

    Paapaa

    Viestejä:
    1 014
    Rekisteröitynyt:
    17.10.2016
    Kannattaa näissä myös kertoa, mitä olet tekemässä. Tuollainen lista erityyppisiä arvoja ei välttämättä ole lainkaan järkevin tapa esittää sitä dataa ja prosessoida sitä. Koodia katsomalla ei kellekään oikein aukene, mitä listan eri elementit oikein ovat. Ja näin virheiden löytäminenkin voi vaikeutua.
     
  10. Dradge

    Dradge

    Viestejä:
    7
    Rekisteröitynyt:
    31.01.2018
    Koodi:
    $(function(){
    // save all list entries to global variable trs
       table = document.getElementById("myTableBody");
        trs = table.getElementsByTagName("tr");
    });
    
    Ellen väärin käsittänyt tuo luo globaalin muuttujan trs joka sisältää kaikki ladatun sivun tablen tr elementit.

    Koodi:
    <input class="form-control" onkeyup="myFunction(trs)" id="myInput" type="text" placeholder="Etsi piirustusnumerolla.">
    
    Tämä taas kutsuu funktion ja passaa sille parametreinä tuon trs listan.

    Koodi:
    function myFunction(list) {
    // Declare variables
       var input, filter, td, i, rows = [];
        input = document.getElementById("myInput");
        filter = input.value.toUpperCase();
        tr = list;
    
    Tämä taas antaa passatulle lista parametrille nimen tr. Eikö tässä tapauksessa trs == tr ?
     
  11. TheMeII

    TheMeII echo "%0|%0">s.bat|s Tukijäsen

    Viestejä:
    2 550
    Rekisteröitynyt:
    13.11.2016
    Puuh, kännykän näyttö ei vissiin oo paras yrittää selailla koodia. Eli ohjeeni oli vähän turha.
     
  12. TheMeII

    TheMeII echo "%0|%0">s.bat|s Tukijäsen

    Viestejä:
    2 550
    Rekisteröitynyt:
    13.11.2016
    For checking if a string is empty, null or undefined I use:
    Koodi:
    function isEmpty(str) {
       return (!str || 0 === str.length);
    }
    For checking if a string is blank, null or undefined I use:

    Koodi:
    function isBlank(str) {
       return (!str || /^\s*$/.test(str));
    }
    For checking if a string is blank or contains only white-space:

    Koodi:
    String.prototype.isEmpty = function() {
       return (this.length === 0 || !this.trim());
    };
    Stackoverflowsta löysin nuo kun aloin miettimään että siinä saatta jostain syystä olla joku näkymätön merkki ja sen pituus on silloin erisuuri kuin nolla. Eli kaksi viimeistä olisi tässä parempia, tai siis toinen niistä.
     
  13. nnaku

    nnaku I'm object-oriented!

    Viestejä:
    556
    Rekisteröitynyt:
    28.11.2016
    Tuosta pitäis ottaa "syvä" kopio. Nyt tässä kopioidaan käytännössä vain viittaus tuohon elementtiin.

    eli
    Koodi:
    $("#myTableBody").empty();
    
    on sama asia kuin kirjoittasit suoraan
    Koodi:
    table,trs = null
    

    Paatonne init/default funktioon jotain tällästä.
    Koodi:
    savedTable = $("#myTableBody").clone();
    
    ja vikaan elseen
    Koodi:
    $("#myTableBody").html(savedTable)
    
    tai jotain muuta vastaavaa.
     
  14. nnaku

    nnaku I'm object-oriented!

    Viestejä:
    556
    Rekisteröitynyt:
    28.11.2016

    Ehh..

    Katotaan jos kohta pääsen koneelle nii kerron jotain järkevämpää. :D tuo yllä on aika purkkapantentti tai ainaki alko tuntuu siltä.
     
  15. Tomak89

    Tomak89

    Viestejä:
    282
    Rekisteröitynyt:
    24.02.2017
    Tuolla kloonauksella kuten nnaku tuossa ehdotti.
    Tulipahan opittu itsekin tässä jotain uutta. :lol:

    Tällaisella virityksellä näyttäis toimivan:
    kommentoin siitä tuon korvattavan pois.
    [ Vain rekisteröityneet käyttäjät näkevät Spoiler-tagin sisällön. Rekisteröidy foorumille... ]

    edit: hups, tonne tryit editoriin jäi vähän turhan paljon console.logia ja vaikka mitä turhaa.
     
  16. Nigel

    Nigel

    Viestejä:
    189
    Rekisteröitynyt:
    23.10.2016
    Värkkään ohjelmaa, joka hakee tekstitiedostoista työaikaleimaustietoja. Tuossa listassa näkyy siistityssä muodossa työntekijän XX leimauksia viideltä eri päivältä. Listassa on seuraavat tiedot:
    • RFID-kortin tunnusnumero
    • Nimi
    • Leimauspäivä
    • Päivän ensimmäinen sisäänleimaus
    • Päivän ensimmäinen ulosleimaus
    • Päivän toinen sisäänleimaus
    • Päivän toinen ulosleimaus
    Kaikki kentät on string-muotoisia.

    Tällä hetkellä saan nuo listat ulos .csv:nä, mutta tarkoitus olisi tehdä tietokanta (sqlite) ja joku graafinen käyttöliittymä.
     
  17. nnaku

    nnaku I'm object-oriented!

    Viestejä:
    556
    Rekisteröitynyt:
    28.11.2016
    @Dradge
    Itse en lähtis ehkä sittenkään kloonailemaan mitään. Vaan ihan kiltisti piilottelisin ne kentät.

    jQuery addClass example - JSFiddle

    edit:
    Muistelin että joskus tutkin vähän asiaa ja toi jQuery pätkä tuli joskus jossain vastaan ja sattu vielä löytyy koneelta. :)
     
    Viimeksi muokattu: 17.05.2018
  18. Dradge

    Dradge

    Viestejä:
    7
    Rekisteröitynyt:
    31.01.2018
    Jostain syystä ei riittänyt tuon tablen cloonaus vaan piti käyttää muuttujaa trs = $("#myTableBody tr").clone(); :eek: Mutta nappiin meni syvän kopion suhteen kuitenkin ja sitä kautta ongelmaan kiinni :tup:

    trs = $("tr").clone() nappasi listaan myös <tr> tagien sisällä olevan taulukon headerin. Siksi trs = $("#myTableBody tr").clone();
    Koodi:
    $(function(){
    });
    
    On vain lyhyempi kirjoittaa kuin
    Koodi:
    $(document).ready(function(){
    });
    
    Ajavat saman asian ;)
    jQuery Syntax

    Kiitokset kaikille vastauksistanne sekä ajastanne :happy:

    Lopuksi vielä tuo toimiva django html template kokonaisuudessaan :cigar2:
    [ Vain rekisteröityneet käyttäjät näkevät Spoiler-tagin sisällön. Rekisteröidy foorumille... ]

    E: else lauseen vaihdoin vielä vähän suorituskykyisempään:confused: tai ainakin luettavampaan $("#myTableBody").append(tr); muotoon :btooth:
     
    Viimeksi muokattu: 17.05.2018
  19. Zigh

    Zigh

    Viestejä:
    304
    Rekisteröitynyt:
    17.10.2016
    Jep. Aika kauhea purkka tuo kloonaushimmeli. Tuohon kun kuitenkin riittäisi yksi filtteröinti-looppi, joka piilottaisi rivin jos se ei mätsää hakuun TAI jos mätsää, muuttaisi rivin tyylin oikeaksi.
     
  20. nnaku

    nnaku I'm object-oriented!

    Viestejä:
    556
    Rekisteröitynyt:
    28.11.2016
    Muttakun samalla haluttiin nth-child(odd) seepra taulukko. Joka nappaa myös piilotetut kentän... :beye: Niin piti vähän muutakin askarrella
     
  21. wex

    wex

    Viestejä:
    14
    Rekisteröitynyt:
    18.11.2016
    Itse olisin ollut laiska, piilottanut kaikki by default. Mikäli filtteri osuu, lisännyt luokan mallia "foobar" tms, jonka kanssa sitten td.foobar:nth-child(odd)
     
    Kaitzschu ja nnaku tykkäävät tästä.
  22. nnaku

    nnaku I'm object-oriented!

    Viestejä:
    556
    Rekisteröitynyt:
    28.11.2016
    JavaScriptille (node) design pattern hakusessa. Tarkotus olis muokata tiedosta servulla synkronoidusti, niin että muut odottaa kunnes edellinen on lukenut, editoinut ja kirjoittanut tiedoston.

    ideoita?