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í
×

včera 23:55 | IT novinky

Společnost StartCom oficiálně oznámila, že jako certifikační autorita končí. Od 1. ledna 2018 přestane vydávat nové certifikáty a následující 2 roky bude poskytovat OCSP a CRL. Počátkem roku 2020 budou všechny platné certifikáty zneplatněny.

Ladislav Hagara | Komentářů: 0
včera 22:00 | IT novinky

Hodnota Bitcoinu, decentralizované kryptoměny, překonala hranici 8 000 dolarů [reddit].

Ladislav Hagara | Komentářů: 0
včera 21:55 | Zajímavý software

Byla vydána verze 10.0 linuxové distribuce Raspberry Digital Signage. Jedná se o distribuci pro jednodeskové počítače Raspberry Pi určenou k prezentačním účelům (veletrhy, prodejny, ...). Po naběhnutí systému je spuštěn webový prohlížeč v režimu celé obrazovky a vybraná prezentace. Nejnovější Raspberry Digital Signage vychází z distribuce Raspbian Stretch.

Ladislav Hagara | Komentářů: 0
včera 13:33 | Zajímavý software

Společnost Google na svém blogu věnovaném open source představila container-diff, nástroj pro analýzu a porovnávání Docker kontejnerů. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0.

Ladislav Hagara | Komentářů: 0
včera 08:00 | Komunita

Flatpak Workshop proběhne ve středu 29. listopadu od 10:00 v Brně. V dopolední přednáškové části se účastníci seznámí s Flatpakem, se specifiky pro aplikace napsané v Qt a GTK+, portály, které integrují aplikace do systému, a na závěr, jak dostat aplikaci do Flathubu, což je momentálně největší centralizovaný repozitář Flatpaků. V odpolední části si pak mohou za pomoci lektorů zkusit nějakou aplikaci zabalit pro Flatpak. Workshop je určen pro 20 účastníků. Nutná je registrace.

Ladislav Hagara | Komentářů: 5
včera 07:00 | Zajímavý článek

Software Freedom Law Center a Software Freedom Conservancy jsou organizace zaměřené na podporu svobodných/open-source projektů: SFLC poskytuje právní konzultace, SFC mj. také zázemí. SFC upozornila, že ze strany SFLC vůči ní proběhly právní kroky směřující k odebrání obchodní známky. SFLC v reakci tvrdí, že se jedná o logický krok, protože obchodní známky jsou si podobné, a SFC dlouhodobě nekooperuje. Brian Lunduke situaci shrnuje včetně ohlasů Neila McGoverna a Matthewa Garretta. Podle nich je Eben Moglen ze SFLC v konfliktu se zájmy komunity.

Fluttershy, yay! | Komentářů: 2
včera 06:00 | Komunita

MariaDB Foundation, nadace stojící za vývojem open source relační databáze MariaDB, oznámila, že Microsoft se stal jejím členem a platinovým sponzorem. Cílem Microsoftu je optimalizace MariaDB pro cloudovou platformu Microsoft Azure.

Ladislav Hagara | Komentářů: 0
16.11. 23:44 | IT novinky

Společnosti Dell a Canonical společně představily 5 nových počítačů Dell Precision s předinstalovaným Ubuntu. Jedná se o 4 notebooky a 1 all-in-one počítač. Cena počítačů s Ubuntu je o 100 dolarů nižší než jejich cena s Windows 10.

Ladislav Hagara | Komentářů: 14
16.11. 22:55 | Nová verze

Po pěti měsících vývoje od vydání verze 4.8 byla vydána nová verze 4.9 svobodného open source redakčního systému WordPress. Kódové označením Tipton bylo vybráno na počest amerického jazzového muzikanta a kapelníka Billyho Tiptona.

Ladislav Hagara | Komentářů: 0
16.11. 22:11 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 146. brněnský sraz, který proběhne v pátek 17. listopadu od 18:00 hodin v restauraci Bogota na Nových Sadech.

Ladislav Hagara | Komentářů: 0
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (9%)
 (1%)
 (1%)
 (1%)
 (74%)
 (14%)
Celkem 699 hlasů
 Komentářů: 36, poslední 17.11. 18:43
    Rozcestník

    Dotaz: C nastavení parametrů fscanf()

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