abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 15:22 | Komunita

    Google zveřejnil seznam 1272 projektů (vývojářů) od 185 organizací přijatých do letošního, již jednadvacátého, Google Summer of Code. Plánovaným vylepšením v grafických a multimediálních aplikacích se věnuje článek na Libre Arts.

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

    Byla vydána (𝕏) dubnová aktualizace aneb nová verze 1.100 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.100 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    včera 18:00 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.5.

    Ladislav Hagara | Komentářů: 0
    včera 01:22 | Nová verze Ladislav Hagara | Komentářů: 0
    včera 00:55 | Zajímavý projekt

    PyXL je koncept procesora, ktorý dokáže priamo spúštat Python kód bez nutnosti prekladu ci Micropythonu. Podľa testov autora je pri 100 MHz približne 30x rýchlejší pri riadeni GPIO nez Micropython na Pyboard taktovanej na 168 MHz.

    vlk | Komentářů: 0
    7.5. 19:44 | Nová verze

    Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 12.0. Přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    7.5. 17:33 | Nová verze

    Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-05-06. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Pravděpodobně se jedná o poslední verzi postavenou na Debianu 12 Bookworm. Následující verze by již měla být postavena na Debianu 13 Trixie.

    Ladislav Hagara | Komentářů: 0
    7.5. 05:33 | Komunita

    Richard Stallman dnes v Liberci přednáší o svobodném softwaru a svobodě v digitální společnosti. Od 16:30 v aule budovy G na Technické univerzitě v Liberci. V anglickém jazyce s automaticky generovanými českými titulky. Vstup je zdarma i pro širokou veřejnost.

    Ladislav Hagara | Komentářů: 17
    7.5. 03:55 | Komunita

    sudo-rs, tj. sudo a su přepsáné do programovacího jazyka Rust, nahradí v Ubuntu 25.10 klasické sudo. V plánu je také přechod od klasických coreutils k uutils coreutils napsaných v Rustu.

    Ladislav Hagara | Komentářů: 0
    6.5. 22:11 | Nasazení Linuxu

    Fedora se stala oficiální distribucí WSL (Windows Subsystem for Linux).

    Ladislav Hagara | Komentářů: 3
    Jaký filesystém primárně používáte?
     (57%)
     (1%)
     (8%)
     (22%)
     (4%)
     (2%)
     (2%)
     (1%)
     (1%)
     (3%)
    Celkem 564 hlasů
     Komentářů: 26, poslední včera 09:58
    Rozcestník

    Dotaz: C nastavení parametrů fscanf()

    17.5.2011 11:46 Igor
    C nastavení parametrů fscanf()
    Přečteno: 947×
    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.