Gå til innhold

Anbefalte innlegg

Skrevet

Skal flette sammen to txt filer.

 

I hovedfila (txt) har jeg en standardstruktur, hvor jeg skal sette inn navn.

 

1 <?
2 $efternavntal = rand(0, 300);
3
4 switch ($efternavntal) {

5 case (0) :
6 $etternavn = "-";
7 break;

8 case (1) :
9 $etternavn = "-";
10 break;

 

Så har jeg en txt fil med navn

1 Andersen

2 Hansen

3 Knutsen

4 Nilsen

5 Jensen

 

Jeg ønsker å flette inn navnene slik at det blir som dette:

1 <?
2 $efternavntal = rand(0, 300);
3
4 switch ($efternavntal) {

5 case (0) :
6 $etternavn = "Andersen";
7 break;

8 case (1) :
9 $etternavn = "Hansen";
10 break;

 

Er dette mulig? Evt hvordan Har prøvd å google litt, hvor det er mye på fletting av txt filer men ikke med betingelsene jeg har satt. Har også prøvd ett program som heter WinMerge, men dette virker litt for simpelt til mine krav.

Videoannonse
Annonse
Skrevet (endret)

Noe som dette kan være greit.

with open('name.txt') as f_name:
    names = [i.split()[1] for i in f_name]

count = 0
with open('text.txt') as f_text,open('result.txt', 'w') as f_out:
    for line in f_text:
        if '$etternavn' in line:
            count += 1
            line = line.replace('-', names[count-1])
        print line.strip() #Test print
        f_out.write(line)

Output:

1 <?
2 $efternavntal = rand(0, 300);
3
4 switch ($efternavntal) {
5   case (0) :
6 $etternavn = "Andersen";
7   break;
8   case (1) :
9 $etternavn = "Hansen";
10   break;
Endret av snippsat
  • Liker 1
Skrevet

Unnskyld men jeg er ganske løk på dette. Setter jeg dette inn som et skript i kommandolinje i Windows?

 

Takker forøvrig for at du prøver å hjelpe en stakkar.

Skrevet (endret)

Jeg kunne vel ha nevnt at dette var med Python

Rask innføring last ned Python 2.7.8,enkel editor last ned Pyscripter

Når jeg testet dette en mappe med to txt filer,

som jeg kopierte fra posten din hovedfila("text.txt") og txt navn("name.txt").

 

Start Pyscripter lim inn koden fra posten min,

lagre koden i samme mappe som du har txt filene.

Trykk på Run(Ctrl+F9),se om du får samme output.

Endret av snippsat
  • Liker 1
Skrevet

IndexError: list index out of range

 

Linje 2 i scriptet er merket rødt.

names = [i.split()[1] for i in f_name]

 

Vet ikke om det har betydning, men jeg opplyste ikke om at tallene i hovedfila har jeg satt inn for å vise linjenummer. Disse eksisterer ikke i orginalfila.

 

Har for sikkerhets skyld lagt ved en zip fil med begge txt filene og python fila.

 

 

efternavne.zip

Skrevet
Vet ikke om det har betydning, men jeg opplyste ikke om at tallene i hovedfila har jeg satt inn for å vise linjenummer. Disse eksisterer ikke i orginalfila.

 

Jo det har noe og si,men fikser det.

Test denne.

with open('efternavne.txt') as f_name:
    names = [i.strip() for i in f_name]
    #print names

count = 0
with open('efternavne-struktur.txt') as f_text,open('result.txt', 'w') as f_out:
    try:
        for line in f_text:
            if '$efternavn' in line:
                count += 1
                line = line.replace('-', names[count-3])
            print line.strip() #Test print
            f_out.write(line)
    except IndexError:
        pass

 

  • Liker 1
  • 1 måned senere...
Skrevet

 

Test denne.

 

Siste scriptet var nesten perfekt, men dersom du ser på orginalfila ender den med

  case (999) :
$fornavn = "-";
    break;



}
?>
 

Mens fila som skriptet generer slutter etter at navnene er flettet inn.

    break;
  case (299) :

Er det mye stress å fikse skripet slik at det blir slik jeg har beskrevet?

Skrevet
Er det mye stress å fikse skripet slik at det blir slik jeg har beskrevet?

 

Går greit,filene du postet hadde ikke samme lenge.

Denne skal legge til og virke i begge tilfeller.

Start med en blank "result.txt" file,har forandret til "(a)append".

with open('efternavne.txt') as f_name:
    names = [i.strip() for i in f_name]

count = 0
with open('efternavne-struktur.txt') as f_text,open('result.txt', 'a') as f_out:
    try:
        for line in f_text:
            if '$efternavn' in line:
                count += 1
                line = line.replace('-', names[count-3])
            print line.strip() #Test print
            f_out.write(line)
        f_out.write('\n\n\n}\n?>') #if e-stru/efter-n has same lenght
    except IndexError:
        f_out.write('\n\n\n}\n?>')
        pass

 

Skrevet

 

Er det mye stress å fikse skripet slik at det blir slik jeg har beskrevet?

 

Går greit,filene du postet hadde ikke samme lenge.

Denne skal legge til og virke i begge tilfeller.

Start med en blank "result.txt" file,har forandret til "(a)append".

with open('efternavne.txt') as f_name:
    names = [i.strip() for i in f_name]

count = 0
with open('efternavne-struktur.txt') as f_text,open('result.txt', 'a') as f_out:
    try:
        for line in f_text:
            if '$efternavn' in line:
                count += 1
                line = line.replace('-', names[count-3])
            print line.strip() #Test print
            f_out.write(line)
        f_out.write('\n\n\n}\n?>') #if e-stru/efter-n has same lenght
    except IndexError:
        f_out.write('\n\n\n}\n?>')
        pass

 

 

 

Nesten, skriptet slutter med

    break;
  case (609) :



}
?>

Er det mulig å få det til å ta med hele strukturen, slik at dersom jeg har 500 navn. Tar man like vel med de resterende 500 linjene uten å endre de?

    case (498) :
$efternavn = "Zamora";
    break;
  case (499) :
$efternavn = "Zerteza";
    break;
  case (500) :
$efternavn = "-";
    break;
  case (501) :
$efternavn = "-";
    break;

************SNIP************

  case (998) :
$efternavn = "-";
    break;
  case (999) :
$efternavn = "-";
    break;



}

?>

Linjene mellom 501-998 skal også være med. Regner med du skjønte det :)

Skrevet (endret)
Er det mulig å få det til å ta med hele strukturen, slik at dersom jeg har 500 navn. Tar man like vel med de resterende 500 linjene uten å endre de?

 

Test denne,skal ta med resten etter fletting er ferdig.

with open('efternavne.txt') as f_name:
    names = [i.strip() for i in f_name]

count = 0
with open('efternavne-struktur.txt') as f_text,open('result.txt', 'a') as f_out:
    try:
        for line in f_text:
            if '$efternavn' in line:
                count += 1
                line = line.replace('-', names[count-3])
            print line.strip() #Test print
            f_out.write(line)
        f_out.write('\n\n\n}\n?>') #if e-stru/efter-n has same lenght
    except IndexError:
        for line in f_text:
            f_out.write(line)
        pass
Endret av snippsat
Skrevet

 

Er det mulig å få det til å ta med hele strukturen, slik at dersom jeg har 500 navn. Tar man like vel med de resterende 500 linjene uten å endre de?

 

Test denne,skal ta med resten etter fletting er ferdig.

with open('efternavne.txt') as f_name:
    names = [i.strip() for i in f_name]

count = 0
with open('efternavne-struktur.txt') as f_text,open('result.txt', 'a') as f_out:
    try:
        for line in f_text:
            if '$efternavn' in line:
                count += 1
                line = line.replace('-', names[count-3])
            print line.strip() #Test print
            f_out.write(line)
        f_out.write('\n\n\n}\n?>') #if e-stru/efter-n has same lenght
    except IndexError:
        for line in f_text:
            f_out.write(line)
        pass

 

Strålende igjen :)

Fungerer veldig bra tross en liten uregelmessighet mellom navn og fortsettelse.

break;
  case (499) :
$efternavn = "Zerteza";
    break;
  case (500) :
$efternavn = "-";
    break;
Men den er så liten og bagatellmessig at det veldig lett lar fikse. Takker.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...