abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 0
    dnes 13:33 | Nová verze

    Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.

    Pavel Křivánek | Komentářů: 5
    dnes 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 31
    včera 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 13
    včera 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 2
    včera 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (74%)
     (9%)
     (2%)
     (16%)
    Celkem 800 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: C nastavení parametrů fscanf()

    17.5.2011 11:46 Igor
    C nastavení parametrů fscanf()
    Přečteno: 928×
    Dobrý den, Mám vstupní soubor, kde na každém řádků je 5 řetězců znaků různé délky. Každý řetězec je oddělen mezerou, občas dvěmi. Jedtnotlivé řetězce jsem do svého programu načítal pomocí funkce fscanf().
    fscanf(fr, "%s %s %s %s %s", &retezec1, &retezec2, &retezec3, &retezec4, &retezec5);
    Můj problém je, že já potřebuju, aby z každého řetězce bylo načteno pouze 5 prvních znaků. Pokud jich je náhodou víc potřebuju, aby byly za pátým znakem useknuty. Definoval jsem si tedy proměné retezec jako pole 5 charů. Žil jsem v domění, že funkce fscanf automaticky řetězec usekne, ale neděje se tak. Pokud je náhodou řetězec delší program spadne.

    Je to jednoúčelový program a moc programování nerozumím, proto teď nevím moc jak dál. Dá se nějak funkce fscanf nastavit, aby z každého řetězce přečetla pouze prvních pět znaků do první proměné - poté přeskočila na další řetězec a načetla opět prvních 5 znaků do další proměné a tak dále?

    Předem děkuju za radu.

    Řešení dotazu:


    Odpovědi

    17.5.2011 11:55 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    fscanf(fr, "%5s %5s %5s %5s %5s", &retezec1, &retezec2, &retezec3, &retezec4, &retezec5);
    Project Satan infects Calculon with Werecar virus
    17.5.2011 17:09 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
        #include <stdio.h>
        #include <string.h>
         
        #define STR_MAX     32
        #define STR_SIZE     5
        #define TO_STR_SIZE "5"
        #define WORDS_IN_ROW 5
         
        int main(int argc, char *argv[])
        {
            FILE *f;
            f=fopen("file.txt", "r");
            if (f != NULL)
            {
                char str[WORDS_IN_ROW][STR_SIZE+1];
                int i;
                for (i=0;i<WORDS_IN_ROW;i++)
                {
                     fscanf(f, "%" TO_STR_SIZE "s", &str[i]);
                     str[i][STR_SIZE]='\0';
         
                     if (i<WORDS_IN_ROW-1)
                     {
                         char c;
                         if ((c=fgetc(f)) != ' ')
                         {
                             char tmp[STR_MAX];
                             fscanf(f, "%s ", &tmp);
                         }
                         else
                         {
                             ungetc(c, f);
                         }
                     }
                }
         
                for (i=0;i<WORDS_IN_ROW;i++)
                {
                    printf("%d: %s\n", i, str[i]);
                }
         
                fclose(f);
            }
            return 0;
        }
    
    Project Satan infects Calculon with Werecar virus
    17.5.2011 12:00 NN
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    fscanf(fr,"%5c", &retezec);
    ?

    NN
    17.5.2011 12:11 Igor
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Děkuji, ale tohle má pokud vím za následek to, že to do retezec1 načte pět znaků ale nepřeskočí v souboru na další řetězec, a do retezec2 začne načítat další znaky ovšem z prvního řetězce tam kde skončil.
    17.5.2011 12:26 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Přes fscanf to nepůjde, bohužel.
    17.5.2011 12:32 Igor
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    A nějaká jiná funkce rozumnější existuje? Mě napadá leda číst po znaku nějakým fgetc() a počítat znaky, ale tam budu muset ještě hlídat mezery. Na fscanf() se mi líbilo, že jsem vůbec nemusel řešit mezery. A celkově to bylo jednoduchý a přehledný.
    skunkOS avatar 17.5.2011 12:58 skunkOS | skóre: 27 | blog: Tak nějak
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Mno určitě bych použil komubinací funkcí STRTOK, FGETS.

    http://www.cplusplus.com/reference/clibrary/cstring/strtok/

    A napsat si funkci která bude vracet řetězec X prvních znaků z nějakého nadřetězce. Typicky "Popokatepetl" >>> char *vratXznaku(char*, int x = 5) >> "Popok"

    Tohle se dá samozřejmě udělat i s funkcemi ze string.h.
    http://martinrotter.github.io
    17.5.2011 13:02 Igor
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Jasně to vypadá celkem reálně. Sice se v tom moc zatím nevyznám, ale to určitě nastuduju. Děkuju
    pavlix avatar 17.5.2011 13:05 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Vždycky to jde udělat ručně, načíst celý řádek a po znacích ho zpracovávat. Všechny tyhle funkce slouží jen k ulehčění. Doporučuju si někdy aspoň cvičně to ruční zpracování napsat. Pak teprv pochopíš a oceníš, co ty zjednodušující funkce nabízejí.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    17.5.2011 14:15 jekub
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    char retezec1[MAX_LEN], ..., retezec5[MAX_LEN];
    fscanf(fr, "%s %s %s %s %s", retezec1, ..., retezec5);
    
    retezec1[5] = ... = retezec5[5] = '\0';
    
    
    C uz jsem dlouho neuzival, ale maji tam skutecne byt ty &?
    pavlix avatar 17.5.2011 14:28 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Mno, ono to vůbec takhle používat nejde, kvůli přetečení.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    17.5.2011 23:25 l4m4
    Rozbalit Rozbalit vše Re: C nastavení parametrů fscanf()
    Nejjednodušší je neblbnout, použít formát %as (GNU rozšíření), takže to řetězce samo naalokuje libovolně dlouhé - a pokud je z nich zapotřebí vzít pouze prvních pět znaků, tak je triviálně oříznout po načtení způsobem
    if (strlen(s) > 5)
       s[5] = '\0';
    
    A nezapomenout pak uvolnit pomocí free().

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.