Avatar billede mmmmn Nybegynder
07. september 2009 - 20:36 Der er 19 kommentarer og
1 løsning

Nummer generering

Søger et program/script som kan generere numre automatisk.

Sådan her:

blomster01-01
blomster01-02
blomster01-03
blomster01-04
blomster02-01
blomster02-02
blomster02-03
blomster02-04

Altså at det "incrementer" et par numre i en tekst, hvor jeg selv kan vælge hvor de stigende numre skal sættes ind.

Det er ligemeget om det er et særskilt program, eller om det er en macro til Excel, bare det virker :)
Programmet skal i øvrigt være gratis :)


På forhånd tak.
Avatar billede nissen2630 Novice
07. september 2009 - 21:04 #1
Det kræver hverken det ene eller det andet

skriv feks 'test001-001' i A1 og 'test002-001' i A2.
Marker de to felter og træk nedad i den lille firkant.
Vælg derefter at sortere den stigende.

Så er har du din liste
Avatar billede nissen2630 Novice
07. september 2009 - 21:06 #2
Glemte lige at sige at det er i Excel
Avatar billede bauerdata Nybegynder
07. september 2009 - 21:17 #3
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
"""
Søger et program/script som kan generere numre automatisk.

Sådan her:

blomster01-01
blomster01-02
blomster01-03
blomster01-04
blomster02-01
blomster02-02
blomster02-03
blomster02-04

Altså at det "incrementer" et par numre i en tekst,
hvor jeg selv kan vælge hvor de stigende numre skal sættes ind.

Det er ligemeget om det er et særskilt program, eller om det er en macro til Excel, bare det virker :)
Programmet skal i øvrigt være gratis :)


"""

def lines(text="blomster", p=0, i1=2, i2=4, test=False):
    u""" text er den tekst du vil have lagt numrene ind i.
    p er placeringen i teksten hvor du vil have det første nummer placeret
    i1 og i2 er max for nummerserierne.
    """
    assert i1 > 0 and i2 > 0
    if test:
        print vars()
    format = text[0:p]+"%(i)02i-%(j)02i"+text[p:]
    for i in range(1,i1+1):
        for j in range(1,i2+1):
            print format % vars()


if __name__ == "__main__":
    lines(test=True)
    lines(p=8,test=True)
    lines(p=4,test=True)
    lines(p=0,test=True)


Output:
{'test': True, 'i1': 2, 'i2': 4, 'text': 'blomster', 'p': 0}
01-01blomster
01-02blomster
01-03blomster
01-04blomster
02-01blomster
02-02blomster
02-03blomster
02-04blomster
{'test': True, 'i1': 2, 'i2': 4, 'text': 'blomster', 'p': 8}
blomster01-01
blomster01-02
blomster01-03
blomster01-04
blomster02-01
blomster02-02
blomster02-03
blomster02-04
{'test': True, 'i1': 2, 'i2': 4, 'text': 'blomster', 'p': 4}
blom01-01ster
blom01-02ster
blom01-03ster
blom01-04ster
blom02-01ster
blom02-02ster
blom02-03ster
blom02-04ster
Avatar billede mmmmn Nybegynder
07. september 2009 - 21:56 #4
bauerdata:
tak for det fine program.
men, jeg går ud fra jeg skal installere python for at det vil virke ikke? (ikke at det gør noget)
og er den nye python 3.1 ok?

nissen2630:
det er en dejlig simpel løsning, men den skulle helst gerne generere ALLE numrene helt automatisk, så jeg ikke skal ind og lave noget "manuelt" hver gang at de skifter til en række nye numre.
Avatar billede mmmmn Nybegynder
08. september 2009 - 00:08 #5
bauerdata:

glem mine spm. programmet virker fint. tak.

men lige en ting ekstra:

"p" placerer fint nok tallene hvor jeg vil have dem.

Men jeg kunne godt tænke mig at jeg kan placere begge tal "hver i sær".

så det eks. hedder:

02blomster05

eller

blomst05er02


så det ene tal altså svarede til "p" og det andet tal til et andet bogstav vel.


Håber du kan forstå min simplistiske forklaring.

På forhånd tak igen.
Avatar billede bauerdata Nybegynder
08. september 2009 - 09:11 #6
Ha det det startede jeg med at lave.
Men jeg kom i tvivl om den der bindestreg ?

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
"""
Søger et program/script som kan generere numre automatisk.

Sådan her:

blomster01-01
blomster01-02
blomster01-03
blomster01-04
blomster02-01
blomster02-02
blomster02-03
blomster02-04

Altså at det "incrementer" et par numre i en tekst,
hvor jeg selv kan vælge hvor de stigende numre skal sættes ind.

Det er ligemeget om det er et særskilt program, eller om det er en macro til Excel, bare det virker :)
Programmet skal i øvrigt være gratis :)


"""

def lines(text="blomster", p1=0, p2=0, i1=2, i2=4, test=False):
    u""" text er den tekst du vil have lagt numrene ind i.
    p1 og p2 er placeringen i teksten hvor du vil have det første nummer og andet nummer placeret
    i1 og i2 er max for nummerserierne.
    """
    if test:
        print vars()
    assert p1 <= p2 and i1 > 0 and i2 > 0
    format = text[0:p1]+"%(i)02i" + text[p1:p2] +  "%(j)02i" + text[:p2]
    for i in range(1,i1+1):
        for j in range(1,i2+1):
            print format % vars()


if __name__ == "__main__":
    lines(test=True)
    lines(p1=0, p2=4, test=True)
    lines(p1=8, p2=8, test=True)
    lines(p1=4, p2=6, test=True)
Avatar billede bauerdata Nybegynder
08. september 2009 - 09:13 #7
Alle siger at du skal vente med Python 3.
Der er for mange 3. parts libs som ikke er klar.
python 2.6 er er helt fin og der kommer nok en 2.7 før version 3 er moden.
Avatar billede bauerdata Nybegynder
08. september 2009 - 09:17 #8
Ups fejl i
format = text[0:p1]+"%(i)02i" + text[p1:p2] +  "%(j)02i" + text[:p2]
til sidst skal der stå
+ text[p2:]
altså : bag p2
Sorry
Avatar billede mmmmn Nybegynder
08. september 2009 - 11:13 #9
lader til at virke perfekt bauerdata!

jeg skiftede til python 2.6 som anbefalet.
og kombinerer det med noget win32 api.


venligst svar, hvis du vil have point.

tak for hjælpen bauerdata og også tak til nissen2630 for forslaget.
Avatar billede bauerdata Nybegynder
08. september 2009 - 11:31 #10
Python er nemt python er sjovt :O)
Avatar billede mmmmn Nybegynder
08. september 2009 - 11:37 #11
det eneste jeg savner lidt ved python, er den samme form for grafiske brugerflade som man eks. finder i MS visual basic .net.

hvor man kan tegne og trække alle de bokse og knapper over man skal bruge.

ikke at det skal ses som en egentlig kritik af python, for hvad jeg kan forstå er selve sproget meget bedre end visual basic sproget.
Avatar billede bauerdata Nybegynder
08. september 2009 - 12:09 #12
Avatar billede bauerdata Nybegynder
08. september 2009 - 12:11 #13
Avatar billede mmmmn Nybegynder
08. september 2009 - 22:00 #14
tak for de gode links bauerdata, det var lige sådan noget jeg var ude efter.

Øhm, ikke for at trænge mig på, men jeg glemte en afgørende ting i det fine script du har lavet.

Er det muligt at få inkoporeret at jeg selv kan angive hvad tallene skal starte fra?

Altså, så det ikke i alle tilfælde er at de starter fra 1, men at jeg selv kan angive at det eks. skal løbe fra [21-25] ?

Beklager jeg sådan spørger efter at du egentlig allerede har hjulpet mig :-)


Tak igen.
Avatar billede ksoren Nybegynder
08. september 2009 - 22:12 #15
Det der med knapper og dimser. Hvis man blot skal lave et simpelt script, som genererer en tekst, så er javascript/hmtl altid en oplagt løsning.
Avatar billede bauerdata Nybegynder
09. september 2009 - 04:32 #16
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
"""
Søger et program/script som kan generere numre automatisk.

Sådan her:

blomster01-01
blomster01-02
blomster01-03
blomster01-04
blomster02-01
blomster02-02
blomster02-03
blomster02-04

Altså at det "incrementer" et par numre i en tekst,
hvor jeg selv kan vælge hvor de stigende numre skal sættes ind.

Det er ligemeget om det er et særskilt program, eller om det er en macro til Excel, bare det virker :)
Programmet skal i øvrigt være gratis :)


"""

def lines(text="blomster", p1=0, p2=0, i1=(1,3), i2=(1,3), test=False):
    u""" text er den tekst du vil have lagt numrene ind i.
    p1 og p2 er placeringen i teksten hvor du vil have det første nummer og andet nummer placeret
    i1 og i2 er (min, max) for nummerserierne.
    """
    if test:
        print vars()
    assert p1 <= p2 and i1[0] < i1[1] and i2[0] < i2[1]
    format = text[0:p1]+"%(i)02i" + text[p1:p2] +  "%(j)02i" + text[p2:]
    for i in range(i1[0],i1[1]+1):
        for j in range(i2[0],i2[1]+1):
            print format % vars()


if __name__ == "__main__":
    lines(test=True)
    lines(p1=0, p2=4, test=True)
    lines(p1=8, p2=8, test=True)
    lines(p1=4, p2=6, test=True)
    lines(p1=4, p2=6, i1=(23,25), test=True)
    lines(p1=4, p2=6, i1=(23,25), i2=(-5, 1), test=True)
Avatar billede bauerdata Nybegynder
09. september 2009 - 10:11 #17
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Her er en version med argumenter på komando linien.
"""
USAGE: %(progname)s [-t <text>] [-p <pos>] [-q <pos>] [-i <interval>] [-j <interval>] [-T]
    -t <text> : default "blomster". Tekst som tællerne i og j sættes ind i
    -p <pos>  : default 0. Position i tekst for første tal.
    -q <pos>  : default 0. Position i tekst for andet tal.
    -i <interval>  : Default 1,3. Start og slut værdier for første tal.
    -j <interval>  : Default 1,3. Start og slut værdier for andet tal.
    -T : test udskrifter.
    -h : denne tekst udskrives.

eksempel
%(progname)s -t "flunkelev" -p 6 -q 9 -i 1,1
output:
flunke01lev01
flunke01lev02
flunke01lev03
"""
import sys
import getopt

def lines(text="blomster", p1=0, p2=0, i1=(1,3), i2=(1,3), test=False):
    u""" text er den tekst du vil have lagt numrene ind i.
    p1 og p2 er placeringen i teksten hvor du vil have det første nummer og andet nummer placeret
    i1 og i2 er (min, max) for nummerserierne.
    """
    if test:
        print vars()
    assert p1 <= p2 and i1[0] <= i1[1] and i2[0] <= i2[1]
    format = text[0:p1]+"%(i)02i" + text[p1:p2] +  "%(j)02i" + text[p2:]
    for i in range(i1[0],i1[1]+1):
        for j in range(i2[0],i2[1]+1):
            print format % vars()

def Usage(text):
    progname = __file__
    print text
    print __doc__ % vars()
    sys.exit(-1)

if __name__ == "__main__":
    try:
        opts, args = getopt.getopt(sys.argv[1:], 't:i:j:p:q:T')
    except:
        Usage("")

    # sæt option defaults.
    t="blomster"
    p=0
    q=0
    i=(1,3)
    j=(1,3)
    T=False

    for (opt, val) in opts:
        if opt == "-t":
            t = val

        try:
            if opt == "-p":
                p = int(val)
            if opt == "-q":
                q = int(val)
            if opt == "-i":
                if not "," in val:
                    Usage("Option error: i er et interval f.eks 1,4")
                i = [int(x) for x in val.split(",") ]
            if opt == "-j":
                if not "," in val:
                    Usage("Option error: j er et interval f.eks 1,4")
                j = [int(x) for x in val.split(",") ]
        except ValueError:
            Usage("Option error: Tal forventet, bogstav(er) givet")

        if opt == "-T":
            T = True
       
        if opt == "-h":
            Usage()
    lines(text=t, p1=p, p2=q, i1=i, i2=j, test=T)
Avatar billede mmmmn Nybegynder
10. september 2009 - 15:15 #18
shit bauerdata! det er godt nok et flot program du har lavet, mere end jeg overhovedet turde spørge efter, med alle de indbyggede options eller argumenter på kommandolinjen som du siger.

Er der en måde hvorpå jeg kan give dig flere point? du fortjener mange flere.

Tak igen.
Avatar billede bauerdata Nybegynder
10. september 2009 - 16:36 #19
Det er jo kun for sjov det her.
Jeg hygger mig med det, nogen spiller spil , jeg koder.
Men jeg lever også af det så hvis du har noget rigtigt arbejde med python så sig bare til.
Avatar billede mmmmn Nybegynder
14. september 2009 - 19:53 #20
god pointe bauerdata. du er bestemt på min huskeliste, skulle jeg engang få brug for professionelt programmørarbejde - tak! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester