sipdav

Hozzászólások

10 bejegyzés megtekintése - 1-10 / 327
  • Szerző
    Bejegyzés
  • Hozzászólás: Python #2029408
    sipdav
    Felhasználó

      Jobb hijjan regexp-el oldottam meg….

      Code:
      def cfgCompare(file1,file2):

          ”’ Compares two cfg files
         
          Thia function compares file2 to file1 (base file).
          If there are no differences returns 0 else 1. In case of exceptions (file opening,
          key violation) returns 1 as well.
          ”’
         
          SECTION = re.compile(‘^s*[s*([^]]*)s*]s*$’)
          PARAM   = re.compile(‘^s*(w+)s*=s*(.*)s*$’)
          PARAMCOMMENT = re.compile(‘^[^;](.*)={1}(.*);.*$’)
          COMMENT = re.compile(‘^.*;.*$’)
          d = {}
          t = {}
          diffsect = {}
          try:
              f = open(file1)
              f2 = open(file2)
          except:
              return 1
         
          def iniprocess(file,tar):
              for line in file:
                  m = SECTION.match(line)
                  if m:
                      section, = m.groups()
                      tar[section.strip()] = {}     
                  m = PARAMCOMMENT.match(line)
                  if m:
                      key, val = m.groups()
                      tar[section][key] = val
                  if COMMENT.match(line):
                      continue   
                  m = PARAM.match(line)
                  if m:
                      key, val = m.groups()
                      tar[section][key.strip()] = val.strip()

          iniprocess(f,d)
          iniprocess(f2,t)
         
          try:
              for k in d.keys():
                  diffsect[k] = {}
                  for i in d[k].keys():
                      diffsect[k][i] = {}
                      if d[k][i] t[k][i]:
                          diffsect[k][i] = d[k][i]
          except KeyError:
              return 1
                         
          if (diffsect.__len__()) == 0:
              return 0
          else:
              return 1

      Hozzászólás: Python #2029407
      sipdav
      Felhasználó

        Ahogy latom, ami nehezze teszi a regexp szurest (nekem), az az, hogy ugy vannak tobb soros kommentek, hogy pl. a „; kommentek” utan soremeles van, a kovetkezo sor TAB-okat es jopar SPACE-t tartalmaz mielott jonne a „; tovabbi kommentek”. Mellesleg a modul beolvasaskor alapbol kiszuri a kulcs-ertek parokkal egy sorban levo kommenteket (pl. „; kommentek”) ami jo, de meghagyja a sortores utaniakat (pl. „; tovabbi kommentek” es „; kb ilyen formaban ahogy latod”). Nekem ezek se kellenek mint ahogy a sor eleji kikommentezett sorok sem (pl. „; MaxCacheMisses = 128”).
        Na, ez jo hosszu lett:)

        Hozzászólás: Python #2029406
        sipdav
        Felhasználó

          Sziasztok! Ujabb kerdesem lenne, ezuttal a ConfigParser modullal es a forras cfg fajlbol olvasas szuresevel kapcsolatban.
          Azt szeretnem elerni az emlitett modul felhasznalasaval, hogy a commentek egyaltalan ne legyenek beolvasva. Guglizas utan sem talaltam a modulnak olyan funkciojat ami ezt lehetove teszi, pedig kezenfekvonek tunik. Masik otletem, hogy beolvasaskor regexp-el szurom a beolvasott dolgokat es group-olassal kiszedem. Nem igazan sikerult eddig, mert nehe tobb soros illeszkedest kell nezni az meg nem az erossegem. Bemasolom a sima – mindent beolvaso – kodot megkoszonom ha kiegeszititek a fenti szurest megvalosito resszel. Tehat semmilyen kommentet ne olvasson be.

          Code:
          import ConfigParser

          config = ConfigParser.ConfigParser()

          config.read(„sample.cfg”)

          for section in config.sections():
              print section
              for option in config.options(section):
                  print ” „, option, „=”, config.get(section, option)

          sample.cfg

          Code:
          [valamiblokk]
          egyebdefinicio      = 128     ; kommentek
                                    ; tovabbi kommentek
                              ; kb ilyen formaban ahogy latod

          megintvalami     = 192000 ; The maximum number of pricers to allocate
          masvalamifdsfdsdfs  = 25000     ; how often (in terms of pricing calls)
                                ; to log cache usage statistics

          ;; other parameters
          DefaultCacheSize = 1024
          VolaBucketSize = 0.001 ;
          ; MaxCacheMisses = 128
          ; MaxShiftRatio  = 0.3

          Hozzászólás: Python #2029405
          sipdav
          Felhasználó

            pontosan: Általános Linux problémák/Programozas/Python – szerintem nem off.
            Az egy dolog, hogy a konkret pelda egy win-es ini fajlt parsol, de a feladat ugyanez linuxon is, nem? Ott is parsolsz config fajlokat (akar ini-t is)…

            Mindenesetre megoldottam kozben, aki kelloen Python-nak latja a kodot nezze meg 🙂

            Code:
            import ConfigParser

            ind = „”

            dirdict = {„[AQTOR dll]”: „AQTOR”,
                      „[AQTOR]”: „AQTOR”,
                      „[MaketSpecificDLLsNotSelgRegistered]”: „AQTOR”,
                      „[MarketSpecificDLLs]”: „AQTOR”,
                      „[Install Files]”: „Install”,
                      „[System dll]”: „C:WINDOWS”,
                      „[AQTOR Files]”: „AQTOR”
                      }
            pre = ‘, „‘
            pos = ‘”‘

            try:
                outf = open(‘iscab_result.ini’ , ‘w’)
            except IOError:
                print „Couldn’t open file ” + outf
                sys.exit(1)

            config = ConfigParser.ConfigParser()
            config.read(„iscab.ini”)

            for section in config.sections():
                kkey = „[” + section + „]”
                if kkey „[ISCAB Info]”:
                    outf.write(kkey + „n”)
                    for option in config.options(section):
                        try:
                            if kkey „[System dll]”:
                                outp = option + „=” + config.get(section, option) + ‘, „‘ + ind + „\” + dirdict[kkey] + ‘”‘ + „n”
                            else:
                                outp = option + „=” + config.get(section, option) + ‘, „‘ + dirdict[kkey] + ‘”‘ + „n”
                            outf.write(outp)               
                        except:
                            pass

            Hozzászólás: Python #2029403
            sipdav
            Felhasználó

              reszlet az ini-bol:

              Code:
              [MaketSpecificDLLsNotSelgRegistered]
              File1=”libeay32.dll”
              File2=”ssleay32.dll”

              [MarketSpecificDLLs]
              File1=”mtapi.dll”

              [Install Files]
              File1=”ActivAMEX.reg”
              File2=”ActivARCA.reg”
              File3=”ActivBOX.reg”
              File4=”ActivCBOE.reg”
              File5=”activinfo.txt”
              File6=”ActivISE.reg”
              File7=”ActivPCX.reg”

              Hozzászólás: Python #2029402
              sipdav
              Felhasználó

                bocs, a kod:

                Code:
                import sys
                import re

                # ini-blok – hozzaadni valo directory path-ok
                dirdict = {„[AQTOR dll]”: „AQTOR”,
                          „[AQTOR]”: „AQTOR”,
                          „[MaketSpecificDLLsNotSelgRegistered]”: „AQTOR”,
                          „[MarketSpecificDLLs]”: „AQTOR”,
                          „[Install Files]”: „Install”,
                          „[System dll]”: „C:WINDOWS”,
                          „[AQTOR Files]”: „AQTOR”
                          }
                pre = ‘, „‘
                pos = ‘”‘

                f = open(„iscab.ini”)
                insect = 0
                for line in f:
                    line = line.strip()
                    for k, v  in dirdict.items():
                        if line == „”:
                            print line
                            break
                        elif re.match(‘\’ + k, line):
                            print line
                            insect = 1
                            break
                        elif not re.match(‘[‘, line) and insect == 1:
                            print line + pre + v + pos
                            break
                        elif re.match(‘[‘, line):
                            insect = 0
                            # break
                        else:
                            break

                Hozzászólás: Python #2029401
                sipdav
                Felhasználó

                  Szasztok! Gondolom alapfeladat, de mar kiguvad a szemem. Pls help.
                  Szoval: az alabbi script feladata az lenne, hogy vegigmegy egy ini file-on. Ha egy nevezetes dictionary-ban key-kent definialt blokkba er, akkor a blokkban szereplo sorok utan vesszovel hozzakonkatenalja a dictionary-ban az adott blokkhoz rendelt (kulcs erteke) hozzaadnivalot 🙂
                  Az alabbi script baja, hogy mindig minden blokkban szereplo ertekhez  a „c:WINDOWS”erteket rendeli, ami nyilvan azert lehet mert kulcs alapjan abc sorrendben az az utolso kulcs-ertek. Koszi elore is.

                  Hozzászólás: C programozás #2016386
                  sipdav
                  Felhasználó

                    köszi, ez is műk 🙂

                    Hozzászólás: C programozás #2016383
                    sipdav
                    Felhasználó

                      C-ben végülis így oldottam meg – a javaslat alapján cilusba tettem a memória allokációt (+ a vizsgélatot újabb függvénybe)
                      int memOccSucceed (char *par) {
                      if (par == NULL) {
                      exit(1);
                      }
                      else {
                      return 0;
                      }
                      }

                      int fileReader () {
                      FILE *FILEIN;
                      char *tomb[20];
                      int i=0;

                      FILEIN = fopen(„/home/cucc/szoveg.txt”, „r”);
                      char *sor;
                      size_t hossz=255;
                      sor = malloc(hossz);

                      memOccSucceed(sor);
                      while(getline(&sor,&hossz,FILEIN) != -1) {
                      tomb=sor;
                      i++;
                      sor = malloc(hossz);
                      memOccSucceed(sor);
                      }
                      free(sor);
                      fileWriter (tomb, i);
                      return 0;
                      }

                      Hozzászólás: C programozás #2016382
                      sipdav
                      Felhasználó

                        Amúgy továbbra sem ír ki semmit. Fut, majd egy idő után kiírja az eclipse konzoljára:
                        terminate called after throwing an instance of ‘std::bad_alloc’
                          what():  std::bad_alloc

                      10 bejegyzés megtekintése - 1-10 / 327