pilkku riville jos numero

Millä tekniikalla tai kielellä olisi mukavinta pistää pilkku jokaiselle riville ennen numeroa?
Tässä esimerkki monta sataa riviä pitkästä tiedostosta.

Tamrmen, E. 49.
Tuominen, F. A. 177.
Tuominen, I. S. 6.
Tuominen, D. 79.

Pilkku pitäisi siis saada esimerkiksi: Tuominen, D. ,79.
20303
Äänestä

Muut lukivat myös

Vastaukset 20

Vanhimmat

esim. pythonilla jotenkin näin

- - - - - - - - - - - -

a = "Tuominen, F. A. 177."
b = '123456789'

i=-1;
for c in b:
d=a.find(c)
if d != -1 and (i == -1 or d  < i):
i = d

if i != -1:
c = a[:i] ',' a[i:]

print (a)
print (c)

- - - - - - - - - - -

tulostaa:
Tuominen, F. A. 177.
Tuominen, F. A. ,177.

Lisäksi vain tiedostosta luku ja talletus rivi riviltä

Äänestä
  • Jahas tabulaattorit ei näemmä näy

    a = "Tuominen, F. A. 177."
    b = '123456789'

    i=-1;
    for c in b:
    d=a.find(c)
    if d != -1 and (i == -1 or d  < i):
    i = d

    if i != -1:
    c = a[:i] ',' a[i:]

    print (a)
    print (c)

    Äänestä

  • aapeli. kirjoitti:

    Jahas tabulaattorit ei näemmä näy

    a = "Tuominen, F. A. 177."
    b = '123456789'

    i=-1;
    for c in b:
    d=a.find(c)
    if d != -1 and (i == -1 or d  < i):
    i = d

    if i != -1:
    c = a[:i] ',' a[i:]

    print (a)
    print (c)

    Ei näemmä välilyönnitkään, no entä näin?

    a = "Tuominen, F. A. 177."
    b = '123456789'

    i=-1;
    for c in b:
        d=a.find(c)
        if d != -1 and (i == -1 or d  < i):
            i = d

    if i != -1:
        c = a[:i] ',' a[i:]

    print (a)
    print (c)

    Äänestä

  • aapeli. kirjoitti:

    Ei näemmä välilyönnitkään, no entä näin?

    a = "Tuominen, F. A. 177."
    b = '123456789'

    i=-1;
    for c in b:
        d=a.find(c)
        if d != -1 and (i == -1 or d  < i):
            i = d

    if i != -1:
        c = a[:i] ',' a[i:]

    print (a)
    print (c)

    Jotain tällaista kun tiedoston luku ja kirjoitus on mukana

    - - - - - - - -

    nrot = '123456789'

    t1 = open ("lukutiedosto.txt","r")
    sisalto = t1.readlines()
    t1.close()
    t1 = open ("kirjoitustiedosto.txt","w")

    for a in sisalto:
        i=-1;
        for c in nrot:
            d = a.find(c)
            if d != -1 and (i == -1 or d  < i):
                i = d
        if i != -1:
            c = a[:i] ',' a[i:]
        t1.write(c)
    t1.close()

    Äänestä

  • aapeli. kirjoitti:

    Jotain tällaista kun tiedoston luku ja kirjoitus on mukana

    - - - - - - - -

    nrot = '123456789'

    t1 = open ("lukutiedosto.txt","r")
    sisalto = t1.readlines()
    t1.close()
    t1 = open ("kirjoitustiedosto.txt","w")

    for a in sisalto:
        i=-1;
        for c in nrot:
            d = a.find(c)
            if d != -1 and (i == -1 or d  < i):
                i = d
        if i != -1:
            c = a[:i] ',' a[i:]
        t1.write(c)
    t1.close()

    jos jollakin rivillä ei olekaan numeroita, niin siltävaralta tuossa lopussa voisi olla

        if i != -1:
            c = a[:i] ',' a[i:]
            t1.write(c)
        else:
            t1.write(a)

    Äänestä

sed -i 's/ \([0-9]\)/, \1/g'

Äänestä
  • Nojoo.. laitetaan sitten lyhyeksi.
    - - - - -

    import re
    t1 = open ("lukutiedosto.txt","r")
    t2 = open ("kirjoitustiedosto.txt","w")
    t2.write(re.sub('(?

    Äänestä

  • aapeli. kirjoitti:

    Nojoo.. laitetaan sitten lyhyeksi.
    - - - - -

    import re
    t1 = open ("lukutiedosto.txt","r")
    t2 = open ("kirjoitustiedosto.txt","w")
    t2.write(re.sub('(?

    pythonilla saat tuon kaiken kahdelle riville (eka rivi on edelleen import re), kun heität turhat openit ja closet pois. silti se venyy kymmeniä merkkejä sediä pidemmäksi.

    Äänestä

  • oikea vastaus kirjoitti:

    pythonilla saat tuon kaiken kahdelle riville (eka rivi on edelleen import re), kun heität turhat openit ja closet pois. silti se venyy kymmeniä merkkejä sediä pidemmäksi.

    Ohjelma kannattaa tehdä Brainfuckilla jotta siinä ei tarvita noinjärjwttömän montaa erilaista merkkiä kuin pythonilla. Oikeat ammattilaiset tekevät sitten Whitespacella jolloin tarvittavien merkkien määrä laskee vielä vähäisemmäksi. Vähemmän = aina helpompaa.

    Äänestä

  • oikea vastaus kirjoitti:

    pythonilla saat tuon kaiken kahdelle riville (eka rivi on edelleen import re), kun heität turhat openit ja closet pois. silti se venyy kymmeniä merkkejä sediä pidemmäksi.

    Toki saa
    open("kirjoitustiedosto.txt","w").write(re.sub('(?

    Äänestä

  • aapeli. kirjoitti:

    Toki saa
    open("kirjoitustiedosto.txt","w").write(re.sub('(?

    ...johon pitää saada pilkut paikalleen, laittasin ne ennemmin muutamassa sekunnissa epäselvällä skriptillä kuin viilailisin turhaan selkeetä, uudelleenkäytettävää, laajennettavaa, standardin mukaista, tehokasta, tietoturvallista tai jotenkin muuten turhaa ratkaisua.

    alkuperäinen kysymys: "Millä tekniikalla tai kielellä olisi mukavinta pistää pilkku jokaiselle riville ennen numeroa?", oikea vastaus: sedillä.

    Äänestä

  • oikea vastaus kirjoitti:

    ...johon pitää saada pilkut paikalleen, laittasin ne ennemmin muutamassa sekunnissa epäselvällä skriptillä kuin viilailisin turhaan selkeetä, uudelleenkäytettävää, laajennettavaa, standardin mukaista, tehokasta, tietoturvallista tai jotenkin muuten turhaa ratkaisua.

    alkuperäinen kysymys: "Millä tekniikalla tai kielellä olisi mukavinta pistää pilkku jokaiselle riville ennen numeroa?", oikea vastaus: sedillä.

    Uudelleenkäytettävyys ja ennenkaikkea laajennettavuus ei ole turhaa. Tuskin elämässäsi vain yhden ainoan kerran tiedostoa muokkaat. Ja silloin selkeyskin eduksi koska uudelleenkäyttö helpompaa.

    Sitäpaitsi sed vastauksesi ei toteuta tehtävää täsmällisesti "pilkku jokaiselle riville ennen numeroa". Vastauksessasi pilkkua ei lisätä jos numeron edessä ei ole välilyöntiä, ja pilkku ei tule ennen numeroa, vaan ennen välilyöntiä.

    Äänestä

  • aapeli. kirjoitti:

    Uudelleenkäytettävyys ja ennenkaikkea laajennettavuus ei ole turhaa. Tuskin elämässäsi vain yhden ainoan kerran tiedostoa muokkaat. Ja silloin selkeyskin eduksi koska uudelleenkäyttö helpompaa.

    Sitäpaitsi sed vastauksesi ei toteuta tehtävää täsmällisesti "pilkku jokaiselle riville ennen numeroa". Vastauksessasi pilkkua ei lisätä jos numeron edessä ei ole välilyöntiä, ja pilkku ei tule ennen numeroa, vaan ennen välilyöntiä.

    "Uudelleenkäytettävyys ja ennenkaikkea laajennettavuus ei ole turhaa"

    joskus on, joskus ei. jotkut sen tietää, jotkut taas ei.

    "Tuskin elämässäsi vain yhden ainoan kerran tiedostoa muokkaat."

    jotkut hommat pitää tehdä vaan kerran. joskus taas skriptan kirjoittaa nopeammin tyhjästä uudelleen kuin etsii sen uudelleenkäytettävän ja ennenkaikkea laajennettavan toteutuksen muiden turhien skriptien joukosta.

    mieti ny: mun sed-komento on lyhyempi kuin sun laajennettavan python-skriptisi hakemistopolku tiedostonimi. eli eiköhän sen uudelleenkäytön voi ihan varmasti unohtaa kokonaan. ja vinkki: jos oikeesti pidät uudelleenkäytettävyyttä arvossa, kannattaa siirtyä muuttujanimistä a, b, c, d vähän kuvaavampiin.

    "Sitäpaitsi sed vastauksesi ei toteuta tehtävää täsmällisesti "pilkku jokaiselle riville ennen numeroa". "

    ja sun toteuttaa? otas rivi "a, b 0 1 23". tolla rivillä on neljä numeroa kolmessa eri luvussa. täsmällisesti luettuna tehtävän anto ei kerro, mitä numeroa ennen pilkku halutaan. aika hyviä arvauksia vois olla ensimmäinen, viimeinen tai kaikki numerot. sun find-toteutuksesi laittaa pilkun ennen tän rivin toista numeroa, ja sun regexpisi laittaa sen ennen ekaa, tokaa ja neljättä numeroa, mutta ei kuitenkaan ennen numeroa 3. kumpikaan sun toteutuksesi ei siis toteuta yhtäkään kolmesta aika hyvästä arvauksesta täsmälliseksi tulkinnaksi.

    tehtävänanto kuvaa erittäin harvoin täsmällisesti sen, mitä oikeesti halutaan. usein ei edes tiedetä mitä täsmälleen halutaan. siksi pitää itse tulkita mitä ehkä saatettaisiin haluta. sun tulkintasi find-toteutuksessa näyttää olleen "ennen rivin ensimmäistä numeroa joka voi olla myös keskellä sanaa" ja regexp-toteutuksessa "ennen jokaista kokonaislukua". nää tulkinnat on niin kaukana toisistaan, että on vähän yllättävää, että kuitenkin huomautat tehtävän täsmällisestä tulkinnasta.

    omassa tulkinnassani halusin noudattaa sitä oikeinkirjoitussääntöä, joka laittaa pilkun jälkeen aina välilyönnin. jos menee väärin, voi kirjoittaa paljon nopeammin uuden sed-komennon kuin koittaa muokata uudelleenkäytettävää ja laajennettavaa python-viritystä. see what i mean?

    Äänestä

  • oikea vastaus kirjoitti:

    "Uudelleenkäytettävyys ja ennenkaikkea laajennettavuus ei ole turhaa"

    joskus on, joskus ei. jotkut sen tietää, jotkut taas ei.

    "Tuskin elämässäsi vain yhden ainoan kerran tiedostoa muokkaat."

    jotkut hommat pitää tehdä vaan kerran. joskus taas skriptan kirjoittaa nopeammin tyhjästä uudelleen kuin etsii sen uudelleenkäytettävän ja ennenkaikkea laajennettavan toteutuksen muiden turhien skriptien joukosta.

    mieti ny: mun sed-komento on lyhyempi kuin sun laajennettavan python-skriptisi hakemistopolku tiedostonimi. eli eiköhän sen uudelleenkäytön voi ihan varmasti unohtaa kokonaan. ja vinkki: jos oikeesti pidät uudelleenkäytettävyyttä arvossa, kannattaa siirtyä muuttujanimistä a, b, c, d vähän kuvaavampiin.

    "Sitäpaitsi sed vastauksesi ei toteuta tehtävää täsmällisesti "pilkku jokaiselle riville ennen numeroa". "

    ja sun toteuttaa? otas rivi "a, b 0 1 23". tolla rivillä on neljä numeroa kolmessa eri luvussa. täsmällisesti luettuna tehtävän anto ei kerro, mitä numeroa ennen pilkku halutaan. aika hyviä arvauksia vois olla ensimmäinen, viimeinen tai kaikki numerot. sun find-toteutuksesi laittaa pilkun ennen tän rivin toista numeroa, ja sun regexpisi laittaa sen ennen ekaa, tokaa ja neljättä numeroa, mutta ei kuitenkaan ennen numeroa 3. kumpikaan sun toteutuksesi ei siis toteuta yhtäkään kolmesta aika hyvästä arvauksesta täsmälliseksi tulkinnaksi.

    tehtävänanto kuvaa erittäin harvoin täsmällisesti sen, mitä oikeesti halutaan. usein ei edes tiedetä mitä täsmälleen halutaan. siksi pitää itse tulkita mitä ehkä saatettaisiin haluta. sun tulkintasi find-toteutuksessa näyttää olleen "ennen rivin ensimmäistä numeroa joka voi olla myös keskellä sanaa" ja regexp-toteutuksessa "ennen jokaista kokonaislukua". nää tulkinnat on niin kaukana toisistaan, että on vähän yllättävää, että kuitenkin huomautat tehtävän täsmällisestä tulkinnasta.

    omassa tulkinnassani halusin noudattaa sitä oikeinkirjoitussääntöä, joka laittaa pilkun jälkeen aina välilyönnin. jos menee väärin, voi kirjoittaa paljon nopeammin uuden sed-komennon kuin koittaa muokata uudelleenkäytettävää ja laajennettavaa python-viritystä. see what i mean?

    Hyvin sanottu.

    Ei kannata tehdä yleiskäyttöistä tauhkaa jos asia on yksinkertainen ja luultavasti kertaluonteinen.

    Joku tekisi vielä kaiken siirrettävästi ilman erillistä vaatimusta. Sekin voi onnistua tai sitten ei.

    Turhiin asioihin ei kannata panostaa.

    Äänestä

  • Rambeus kirjoitti:

    Hyvin sanottu.

    Ei kannata tehdä yleiskäyttöistä tauhkaa jos asia on yksinkertainen ja luultavasti kertaluonteinen.

    Joku tekisi vielä kaiken siirrettävästi ilman erillistä vaatimusta. Sekin voi onnistua tai sitten ei.

    Turhiin asioihin ei kannata panostaa.

    Tehkää ensin sedillä niin pilkku tulee väärin, ja tehkää se sitten oikein pythonilla.

    Äänestä

  • trollipeikko. kirjoitti:

    Tehkää ensin sedillä niin pilkku tulee väärin, ja tehkää se sitten oikein pythonilla.

    Pythonilla teet sen uudelleenkäytettäväksi ja muokattavaksi.

    Turhaan.

    Ja aikaa palaa.

    Äänestä

  • Mitä toi '-i' tossa tekee, ei toimi. Ja tiedostotkin pitäisi olla eli näin:

    sed 's/ \([0-9]\)/ ,\1/g' new.txt

    Äänestä

  • laljasladljas kirjoitti:

    Mitä toi '-i' tossa tekee, ei toimi. Ja tiedostotkin pitäisi olla eli näin:

    sed 's/ \([0-9]\)/ ,\1/g' new.txt

    Siis näin ('kulmasulut' häviää palstalla):

    sed 's/ \([0-9]\)/ ,\1/g' < old.txt > new.txt

    Äänestä

  • allakdaljda kirjoitti:

    Siis näin ('kulmasulut' häviää palstalla):

    sed 's/ \([0-9]\)/ ,\1/g' < old.txt > new.txt

    Siis näin?

    sed 's/ \([0-9]\)/ ,\1/g' new.txt

    Noi kulmasulut ym voi korvata html entiteeleillä ja korvaaminen windowsissa käy kätevästi esimerkiksi seuraavanlaisella python pätkällä. Ohjelma siis käsittelee leikepöydän sisällön. Tarvitaan vain lisäksi http://sourceforge.net/projects/pywin32/ joka sisältää tuon win32clipboard moduulin

    import win32clipboard as w
    import win32con

    def getText():
        w.OpenClipboard()
        d=w.GetClipboardData(win32con.CF_UNICODETEXT)
        w.CloseClipboard()
        return d
     
    def setText(aString):
        w.OpenClipboard()
        w.EmptyClipboard()
        w.SetClipboardData(win32con.CF_UNICODETEXT,aString)
        w.CloseClipboard()

    t = getText()
    t = t.replace("&","&")
    t = t.replace("

    Äänestä

  • allakdaljda kirjoitti:

    Siis näin ('kulmasulut' häviää palstalla):

    sed 's/ \([0-9]\)/ ,\1/g' < old.txt > new.txt

    kysy vaikka "man sed" ja näppäile sitten "/", "-i", enter ja paina vielä "n". et tarvitse kulmasulkeita, tiedostonimi riittää.

    Äänestä

Kommentoi aloitusta


tekstitiedoston käs kirjoitti:

Millä tekniikalla tai kielellä olisi mukavinta pistää pilkku jokaiselle riville ennen numeroa?
Tässä esimerkki monta sataa riviä pitkästä tiedostosta.

Tamrmen, E. 49.
Tuominen, F. A. 177.
Tuominen, I. S. 6.
Tuominen, D. 79.

Pilkku pitäisi siis saada esimerkiksi: Tuominen, D. ,79.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu