Portál AbcLinuxu, 9. května 2024 11:03


Dotaz: nahrazeni textu v GUI

13.11.2003 20:18 Ondřej Čečák | skóre: 33
nahrazeni textu v GUI
Přečteno: 230×
Odpovědět | Admin
dobry den,
neznate nejaky dobry program v grafice (KDE 3.1), ktery v adresari nahradi urcity text v souborech?
diky ...
-- "Ja vim, on vi, ty pico!"
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.11.2003 21:33 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše nahrazeni textu v GUI
Odpovědět | | Sbalit | Link | Blokovat | Admin
Předpokládám, že tvůj oblíbený textový editor v KDE to umí... Jinak asi spusť konsole (ta je snad dostatečně grafická ;-) a použij sed -i 's/regexp/za_co_nahradit/g' soubory
14.11.2003 18:14 Ondřej Čečák | skóre: 33
Rozbalit Rozbalit vše nahrazeni textu v GUI
nerikam, ze jsem necekal podobnou odpoved ;o) na nahrazovani pouzivam hotove perlovske skripty, pripadne si cokoli co potrebuju stvorim v sedu, nicneme hledam neco skutecne grafickeho, neco co je pouzitelne pro laictejsiho uzivatele (tzn. zadne regularni vyrazy). kate sice nahrazovat umi, umi v tom regularni vyrazy pouzivat, ale rad bych neco, co projde cely strom a tam to udela. Nasel jsem neco jako kfilereplace, ale kvuli tomu bych musel nahravat cele knihovny kde3.0 ...
-- "Ja vim, on vi, ty pico!"
14.11.2003 18:38 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše nahrazeni textu v GUI
Nevím, jak moc úžasné GUI si představuješ, ale má-li to být ,,vyberu soubory, zadám regulární výraz a nahrazení, stisknu OK``, tak to je s gdialog/zenity na pět řádků shellu (nebo spíš perlu). A mám pocit, že pro KDE/Qt existuje nějaký ekvivalent zenity -- kdybys chtěl dodržet stylovou čistotu.
14.11.2003 20:44 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše nahrazeni textu v GUI
Frontend k sedu ;-) (sorry za dlouhý výpis, ale už tu byly delší s menší hustotou informace...)
#!/usr/bin/python
import gtk, sys, os, glob, re
f = ['*']
cd = os.path.realpath(os.curdir) + '/'
def delprefix(x):
    if x.startswith(cd):
        return x[len(cd):]
    return x
def select_files(*args):
    global f, files
    selector = gtk.FileSelection('Select files')
    selector.set_select_multiple(True)
    selector.run()
    f = [delprefix(x) for x in selector.get_selections()]
    print f
    selector.destroy()
    files.set_text(' '.join(f))
def slabel(text, table, row, widget):
    label = gtk.Label()
    label.set_text_with_mnemonic(text)
    label.set_alignment(0, 0.5)
    label.set_mnemonic_widget(widget)
    table.attach(label, 0, 1, row, row+1)
dialog = gtk.Dialog('Search & Replace', None, 0,
                    (gtk.STOCK_OK, gtk.RESPONSE_OK,
                     gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
dialog.set_border_width(8)
table = gtk.Table(6, 3, False)
table.set_row_spacings(4)
table.set_col_spacings(4)
dialog.vbox.pack_start(table)
dialog.vbox.set_spacing(4)
search = gtk.Entry()
slabel('_Search for', table, 0, search)
table.attach(search, 1, 2, 0, 1)
replace = gtk.Entry()
slabel('_Replace with', table, 1, replace)
table.attach(replace, 1, 2, 1, 2)
files = gtk.Entry()
slabel('In _files', table, 2, files)
files.set_text(' '.join(f))
table.attach(files, 1, 2, 2, 3)
browse = gtk.Button('_Browse...')
table.attach(browse, 2, 3, 2, 3)
browse.connect('clicked', select_files)
recursive = gtk.CheckButton('Recurse into sub_directories')
table.attach(recursive, 0, 2, 3, 4)
globally = gtk.CheckButton('Replace _all occurences')
table.attach(globally, 0, 2, 4, 5)
ignorecase = gtk.CheckButton('_Ignore case')
table.attach(ignorecase, 0, 2, 5, 6)
table.show_all()
response = dialog.run()
f = files.get_text().split(' ')
f = reduce(lambda x, y: x+y, [glob.glob(x) for x in f])
search = search.get_text().replace('/', '\\/')
replace = replace.get_text().replace('/', '\\/')
if (response == gtk.RESPONSE_CANCEL
    or response == gtk.RESPONSE_DELETE_EVENT
    or not f or not search):
    sys.exit(0)
recursive = recursive.get_active()
ignorecase = ('', 'i')[ignorecase.get_active()]
globally = ('', 'g')[globally.get_active()]
dialog.destroy()
ff = []
for x in f:
    if os.path.isdir(x):
        if recursive:
            p = os.popen('find ' + re.sub(r'([$`"\\])', r'\\\1', x)
                         + ' -type f', 'r')
            ff.extend([z.strip() for z in p.readlines()])
            p.close()
    else:
        ff.append(x)
ff = dict([(x, 1) for x in ff]).keys()
exp = 's/%s/%s/%s%s' % (search, replace, globally, ignorecase)
if ff:
    os.execv('/bin/sed', ['sed', '-i', '-e', exp, '--'] + ff)
15.11.2003 08:24 Ondřej Čečák | skóre: 33
Rozbalit Rozbalit vše nahrazeni textu v GUI
diky :o)
-- "Ja vim, on vi, ty pico!"

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.