Oznámení

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

AmigaE

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

    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, 21:14:49. Důvod: šotek
    Amiga DraCo DaMi PegasosII G4 G5

    #2
    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...

    Komentovat


      #3
      O: AmigaE

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

      Komentovat


        #4
        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);
        }
        Amiga DraCo DaMi PegasosII G4 G5

        Komentovat


          #5
          O: AmigaE

          Ta funkcia SplitString() je tam zbytocne, ked sa v nej nic nerobi, len as vracia str...
          Amiga 1200T (E/Box)+BlizzardPPC 603p/363+060/66+BVision PPC+256MB+KS3.1+Cocolino+Lyra 2+Fast Ata MK-IV+320GB WD Blue 3200AAJB PATA HDD(PFS3)+dvdrw+dvd+cf2ide
          Amiga 1200+BlizzardPPC 603e/210+040/25+128MB+KS3.1+CF4GB(PFS3)

          Komentovat


            #6
            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?
            Amiga DraCo DaMi PegasosII G4 G5

            Komentovat


              #7
              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...

              Komentovat


                #8
                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..
                Amiga 1200T (E/Box)+BlizzardPPC 603p/363+060/66+BVision PPC+256MB+KS3.1+Cocolino+Lyra 2+Fast Ata MK-IV+320GB WD Blue 3200AAJB PATA HDD(PFS3)+dvdrw+dvd+cf2ide
                Amiga 1200+BlizzardPPC 603e/210+040/25+128MB+KS3.1+CF4GB(PFS3)

                Komentovat


                  #9
                  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]; // maximalne 4 slova,pre viac slov staci zmenit 4 za pozadovany pocet
                  
                  void main()
                  {        
                           //init na zaciatku a zapise sa rovno adresa prveho slova
                           p=0; c=0;
                           output[c++]=&input[p];
                  
                           //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
                           while(input[p]!=0) {
                           if(input[p-1]==':') { input[p-1]=0; output[c++]=&input[p]; }
                           p++;
                           }
                  
                           //Vysledne adresy kazdeho slova sa nachadzaju v poli output[].
                           //Pre kontrolu si ich vypiseme.
                           for(p=0;p<4;p++) {
                           printf("%s\n",output[p]);
                           }
                  }
                  Amiga 1200T (E/Box)+BlizzardPPC 603p/363+060/66+BVision PPC+256MB+KS3.1+Cocolino+Lyra 2+Fast Ata MK-IV+320GB WD Blue 3200AAJB PATA HDD(PFS3)+dvdrw+dvd+cf2ide
                  Amiga 1200+BlizzardPPC 603e/210+040/25+128MB+KS3.1+CF4GB(PFS3)

                  Komentovat


                    #10
                    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, 02:36:13. Důvod: vice
                    Amiga DraCo DaMi PegasosII G4 G5

                    Komentovat


                      #11
                      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()

                      Komentovat


                        #12
                        O: AmigaE

                        K těmhle postupům v rámci vyššího jazyku jsem se nedostal. Nemůžeš sice řetězec použit přímo jako název proměnné, ale můžeš ho do Tebou stanovené proměnné dát. Pak již pouze porovnáš proměnnou ve které je řetězec s tebou daným řetězcem a při shodě již použiješ konkrétní předem známou proměnnou (MAC adresu). Je to samozřejmě ten nejprimitivnější způsob řešení .
                        Amiga - PMD 85

                        Komentovat


                          #13
                          O: AmigaE

                          Priznam se ze jsem to teda moc nepochopil...
                          Amiga DraCo DaMi PegasosII G4 G5

                          Komentovat


                            #14
                            O: AmigaE

                            Jen jsem chtěl říci, že se dá pracovat i s řetězcem. Nemusíš tedy po "splitu" tedy rozdělení nutně chtít, aby to co se rozdělilo byla proměnná.

                            Python:
                            Code:
                            adresy = "mac1","mac2","mac3" = v proměnné adresy máš 3 řetězce
                            if adresy[0] == "mac3": promennaMacAdresy = indexuješ a porovnáváš text s textem a až po splnění podmínky již pracuješ
                                                                  s proměnnou. To v Pythonu lze, nevím, jak C.
                                                                  Nicméně tenhle princip lze použít i v assembleru například.
                            Napsal jsem pouze základní princip toho, že lze pracovat i s textem a tím, že znáš ty mac adresy, až po splnění podmínky porovnání mac adresy ve tvaru textu/stringu můžeš pracovat přímo s mac adresou jako s proměnou. Jak jsem psal, je to pouze primitivní způsob řešení. Kód je pouze názorný, není tedy funkční.
                            Naposledy upravil Lisiak4; 28.12.2017, 05:54:18.
                            Amiga - PMD 85

                            Komentovat


                              #15
                              O: AmigaE

                              Autorem citovaného textu je Lisiak4 Přejít na původní příspěvek
                              Jen jsem chtěl říci, že se dá pracovat i s řetězcem. Nemusíš tedy po "splitu" tedy rozdělení nutně chtít, aby to co se rozdělilo byla proměnná.

                              Python:
                              Code:
                              adresy = "mac1","mac2","mac3" = v proměnné adresy máš 3 řetězce
                              if adresy[0] == "mac3": promennaMacAdresy = indexuješ a porovnáváš text s textem a až po splnění podmínky již pracuješ
                                                                    s proměnnou. To v Pythonu lze, nevím, jak C.
                                                                    Nicméně tenhle princip lze použít i v assembleru například.
                              Napsal jsem pouze základní princip toho, že lze pracovat i s textem a tím, že znáš ty mac adresy, až po splnění podmínky porovnání mac adresy ve tvaru textu/stringu můžeš pracovat přímo s mac adresou jako s proměnou. Jak jsem psal, je to pouze primitivní způsob řešení. Kód je pouze názorný, není tedy funkční.
                              Priznam se ze jsem to teda moc nepochopil...

                              Komentovat

                              Zpracovávám...
                              X