Oznámení

Sbalit
Aktuálně žádná oznámení.

AmigaE

Sbalit
X
 
  • Filtr
  • Čas
  • Zobrazit
Vymazat vše
new posts

  • ExiE
    odpověděl
    O: AmigaE

    Autorem citovaného textu je ghh Přejít na původní příspěvek
    Pred tim jsem znal jenom Arexx a jeho funkci parse, tak jsem myslel ze je to bezna vec. Ted jsem nasel ten priklad co dela neco podobnyho, ale nevim jestli "se to tak dela", nebo existuje neco jednodussiho
    Pocty slov i oddelovace jsou predem znamy (MAC adresy v MUI listu) a nebyl by problem je zmenit. Chci tedy vzit polozku v listu, ktera obsahuje text se jmenem a mac adresou (text je vcelku, slova oddelena dvojteckou). Tenhle text chci rozkouskovat na jednotlivy promenny abych je moh pouzit jinde (vyplnit do poli v editacnim okne).
    DJM: Tvuj priklad je jasny a mam rad hodne komentaru
    hmm pokud je ten string vzdy naprosto stejny, tak by sel rozparserovat jednoduseji i pomoci x regcomp()

    Vložit komentář:


  • ghh
    odpověděl
    O: AmigaE

    Pred tim jsem znal jenom Arexx a jeho funkci parse, tak jsem myslel ze je to bezna vec. Ted jsem nasel ten priklad co dela neco podobnyho, ale nevim jestli "se to tak dela", nebo existuje neco jednodussiho
    Pocty slov i oddelovace jsou predem znamy (MAC adresy v MUI listu) a nebyl by problem je zmenit. Chci tedy vzit polozku v listu, ktera obsahuje text se jmenem a mac adresou (text je vcelku, slova oddelena dvojteckou). Tenhle text chci rozkouskovat na jednotlivy promenny abych je moh pouzit jinde (vyplnit do poli v editacnim okne).
    DJM: Tvuj priklad je jasny a mam rad hodne komentaru
    Naposledy upravil ghh; 27.12.2017, 03:36:13. Důvod: vice

    Vložit komentář:


  • DJM
    odpověděl
    O: AmigaE

    Takto nejako by som to robil ja. Jednoduche a pre dany pripad funkcne...

    Code:
    #include <stdio.h>
    
             int p,c;
             char *input="Standa:Pepik:Ruda:Milan";
             char *output[4]; [COLOR=#008000]// maximalne 4 slova,pre viac slov staci zmenit 4 za pozadovany pocet[/COLOR]
    
    void main()
    {        
             [COLOR=#008000]//init na zaciatku a zapise sa rovno adresa prveho slova[/COLOR]
             p=0; c=0;
             output[c++]=&input[p];
    
             [COLOR=#008000]//Pokial neni koniec vstupneho retazca (0), kontroluje sa ci nebola ":".
             //Ak bola, prepise sa na 0 (ukoncenie noveho retazca) a do pola output
             //sa zapise adresa zaciatku slova[/COLOR]
             while(input[p]!=0) {
             if(input[p-1]==':') { input[p-1]=0; output[c++]=&input[p]; }
             p++;
             }
    
             [COLOR=#008000]//Vysledne adresy kazdeho slova sa nachadzaju v poli output[].
             //Pre kontrolu si ich vypiseme.[/COLOR]
             for(p=0;p<4;p++) {
             printf("%s\n",output[p]);
             }
    }

    Vložit komentář:


  • DJM
    odpověděl
    O: AmigaE

    Ja by som to robil trochu inak. Kontroloval by som znak po znaku, az kym by som nenarazil na ":" a zaroven si to zapisoval do nejakeho pola stringov. Ale ako pise aj Exie, neviem co s tym presne chces, kolko by bolo maximalne slov (ci len 4, alebo viac), atd..

    Vložit komentář:


  • ExiE
    odpověděl
    O: AmigaE

    Vazne je tohle to co potrebujes?

    Ja jsem v C dlouho nic neprogramoval, ale pokud to chapu dobre tak rozdelit string pomoci printf znamena, ze ho rovnou vypisujes na standardni vystup, coz je pro dalsi zpracovani naprd. Pokud to chces jen vypsat, tak mas hotovo, ale pokud to budes nejak dal zpracovavat, tak tohle moc nepomuze...

    Vložit komentář:


  • ghh
    odpověděl
    O: AmigaE

    Aha me bylo divny ze jsem nikde nenasel nic o SplitString Takze takhle:
    Code:
    #include<stdio.h>
    
    main()
    {
        char* input ="Standa:Pepik:Ruda:Milan";
        char *output, *temp;
        char * field;
        char sep = ':';
    
        field = input;
        for(temp = field; *temp; ++temp){
           if (*temp == sep){
              printf("%.*s\n", temp-field, field);
              field = temp+1;
           }
        }
        printf("%.*s\n", temp-field, field);
    }
    Je tohle spravnej smer kterym se mam ubirat?

    Vložit komentář:


  • DJM
    odpověděl
    O: AmigaE

    Ta funkcia SplitString() je tam zbytocne, ked sa v nej nic nerobi, len as vracia str...

    Vložit komentář:


  • ghh
    odpověděl
    O: AmigaE

    Nasel jsem tohle a funguje mi to, ale je to v C. Tohle je neco co jsi mel na mysli ?
    Code:
    #include<stdio.h>
    
    char* SplitString(char* str, char sep)
    {
        return str;
    }
    
    main()
    {
        char* input ="Standa:Pepik:Ruda:Milan";
        char *output, *temp;
        char * field;
        char sep = ':';
        output = SplitString(input, sep);
        field = output;
        for(temp = field; *temp; ++temp){
           if (*temp == sep){
              printf("%.*s\n", temp-field, field);
              field = temp+1;
           }
        }
        printf("%.*s\n", temp-field, field);
    }

    Vložit komentář:


  • Doda
    odpověděl
    O: AmigaE

    V C to jde udelat pomoci printf a odpovidajiciho vyrazu, ktery sice neni regularni, ale podoba se tomu.

    Vložit komentář:


  • ExiE
    odpověděl
    O: AmigaE

    Autorem citovaného textu je ghh Přejít na původní příspěvek
    Nemůžu najít jak se dělá v E něco jako je příkaz parse v arexxu. Příklad:
    Neví někdo jak se to dělá v E nebo i v jinym jazyce, E se docela podobá céčku.
    Ja se obavam, ze jak C tak E jsou trosku "nizsi" programovaci jazyky a zadne takto jednoduche funkce nenabizeji (na rozdil treba od PHP kde je explode, nebo str.split v Pythonu).

    V Ccku by jsi mohl pouzit strtok() pripadne pokud by jsi mel k dispozici strsep().

    Ale muzu se samozrejme mylit...

    Vložit komentář:


  • ghh
    založil téma AmigaE

    AmigaE

    Nemůžu najít jak se dělá v E něco jako je příkaz parse v arexxu. Příklad:
    Code:
    /* parse ala arexx */
    mujtext = "Standa:Pepik:Ruda:Milan"
    parse var mujtext jmeno1':'jmeno2':'jmeno3':'jmeno4
    say jmeno1
    say jmeno2
    say jmeno3
    say jmeno4
    Mám text a vím že jsou v něm jména oddělený dvojtečkou. Příkaz parse převede to co je mezi dvojtečkama na proměnné jmeno1, jmeno2, ...

    Neví někdo jak se to dělá v E nebo i v jinym jazyce, E se docela podobá céčku.
    Naposledy upravil ghh; 25.12.2017, 22:14:49. Důvod: šotek
Zpracovávám...
X