Portál AbcLinuxu, 14. srpna 2025 09:53


Dotaz: Automaticka generace popisek vytazenych ze souboru

14.1.2005 10:57 Miroslav Andrle | skóre: 18
Automaticka generace popisek vytazenych ze souboru
Přečteno: 226×
Odpovědět | Admin
Jiz nekolik hodin se trapin nad pomerne jednoduchou veci. Mam vetsi mnozstvi souboru s nasledujici syntaxi:

Toto je zacatek souboru ukazka.m.
function D=ukazka(parametry);
% UKAZKA toto je kratka popiska teto funkce
% tato kratka popiska muze mit nekolik radku
%
% Zde nasleduje podrobnejsi popis
Chtel bych udelat webovskou stranku, kdy by byly tyto funkce popsany. Tzn. zpracovat kazddy tento soubor na
  • ukazka.m toto je kratka popiska teto funkce tato kratka popiska muze mit nekolik radku
  • PS: zde jsem se snazil napsat kus html kodu s tagem li

    Prakticky vzdy to znamena nacist soubor od druhe radky, ignoravat prvni slovo napsane velkymi pismeny. Nekam nacist vse dokud nenarazim na prazdny radek, ktery obsahuje pouze %.

    No a pak zaridit pozadovany vypis.

    Snazim se naky zpusobem vyuzit sed, ale zatim mi to stale nejde.

    Chtel jsem to napsat v BASHi, no pokud se mi to nepovede napisi si v to C.
    Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

    Odpovědi

    14.1.2005 12:40 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: Automaticka generace popisek vytazenych ze souboru
    Odpovědět | | Sbalit | Link | Blokovat | Admin
    C a bash? To sis tedy vybral blbé nástroje. V sedu by to s jistým sebezapřením šlo, ale bude to asi humus nebo několik sedů zřetězených | (1d;/^[^%]/,$d;s/^% *// vybereš jen popisek, etc.).

    Předně bych se podíval, zda pro ten jazyk (to je Matlab?) neexistuje nějaký doxygen, gtk-doc, ..., a použil jej (to sice znamená nutnost úpravy formátu těch komentářů, ale ve výsledku by se to vyplatilo).

    Jinak to napiš v perlu, pythonu, ruby, awk, ..., zkrátka něčem, co je k transformaci textu vhodné.
    Stanislav Brabec avatar 14.1.2005 12:49 Stanislav Brabec | skóre: 45 | Praha
    Rozbalit Rozbalit vše Re: Automaticka generace popisek vytazenych ze souboru
    Takový jednoduchý úkol by měl jít i v čistém bashi bez sedu.
    export LC_ALL=C
    shopt -s extglob
    exec 3<file
    while read -u3 ; do
    ...
    if test "$REPLY" = "" ; then
    ...
    else
    ...
    echo "${REPLY#% *([A-Z]) }"
    ...
    fi
    ...
    done
    exec 3<&-
    
    Více viz man bash(1). Výrazy, které umí bash v extglob režimu, by na to měly stačit.

    Uvedený výraz ale požere slovo napsané velkými písmeny vždy.
    14.1.2005 13:09 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: Automaticka generace popisek vytazenych ze souboru
    Pak musíš odstranit %, dopsat jméno funkce/souboru, HTML značky, nahradit <, >, & entitami, ... Samozřejmě, že to jde, stejně jako bys to mohl napsat v postscriptu, assembleru nebo brainfucku. Ale proč?
    Stanislav Brabec avatar 14.1.2005 13:37 Stanislav Brabec | skóre: 45 | Praha
    Rozbalit Rozbalit vše Re: Automaticka generace popisek vytazenych ze souboru
    Zaprvé to autor chtěl (asi je mu Bash sympatický), zadruhé tento problém jde v bashi řešit celkem snadno a bez oklik. Odstranění % dělá už výše uvedený výraz.

    Nahrazení entit:
    STRING="${STRING//&/&amp;}"
    STRING="${STRING//</&lt;}"
    STRING="${STRING//>/&gt;}"
    
    Na druhou stranu, ve vyšším jazyce na to bude knihovna. Dělám v Bashi celkem velký projekt, a pokud se vyvarujete nečitelných výrazů (nebo alespoň z výrazů typu tag=${vtag//\'\''\'\'''\''/\'\''\'\'''\''\\\'\''\'\'''\''\'\''\'\'''\''} uděláte alias, lze v bashi psát celkem čitelně. Na druhou stranu je bash celkem neodladěný a při použití neobvyklých konstrukcí padá.
    14.1.2005 13:47 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: Automaticka generace popisek vytazenych ze souboru
    Ne, odstraňuje % jen z prvního řádku s UKAZKA, v ostatních ho nechává. Ale to je celkem jedno, je jasné, že ho odstranit lze.

    Na druhou stranu je bash celkem neodladěný a při použití neobvyklých konstrukcí padá.

    Sním o jazyku, který by takový nebyl...
    14.1.2005 13:01 azurIt | skóre: 34 | blog: zatial_bez_mena
    Rozbalit Rozbalit vše Re: Automaticka generace popisek vytazenych ze souboru
    a aj v pythone :) :

    from os import listdir
    from os.path import join
    from string import replace, split

    def popisky(cesta):
    for i in listdir(cesta):
    try:
    file_obj = open(join(cesta, i), "r")
    except IOError, error:
    print error
    return 0
    lines = file_obj.readlines()
    file_obj.close()
    popis = ""
    for i in lines[1:]:
    if i[0] != "%":
    break
    popis = str(popis) + str(i[2:])
    popis = replace(popis, "\n", "")
    popis = replace(popis, "\r", "")
    popis = popis[len(split(popis)[0])+1:]
    print popis
    return 1

    14.1.2005 13:03 azurIt | skóre: 34 | blog: zatial_bez_mena
    Rozbalit Rozbalit vše Re: Automaticka generace popisek vytazenych ze souboru
    a aj v pythone :) :

    from os import listdir
    from os.path import join
    from string import replace, split

    def popisky(cesta):
      for i in listdir(cesta):
      try:  
          file_obj = open(join(cesta, i), "r")
        except IOError, error:
          print error
          return 0
        lines = file_obj.readlines()
        file_obj.close()
        popis = ""
        for i in lines[1:]:
          if i[0] != "%":
            break
          popis = str(popis) + str(i[2:])
        popis = replace(popis, "\n", "")
        popis = replace(popis, "\r", "")
        popis = popis[len(split(popis)[0])+1:]
        print popis
      return 1
    14.1.2005 18:43 Miroslav Andrle | skóre: 18
    Rozbalit Rozbalit vše Re: Automaticka generace popisek vytazenych ze souboru
    Odpovědět | | Sbalit | Link | Blokovat | Admin
    Dekuji vsem za pomoc, nakonec jsem si stahl perlovy script m2tex.pl, ktery prevadi dokumentaci ze souboru MATLABu do TeXu a upravil ho k obrazu svemu.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.