Gå til innhold

Anbefalte innlegg

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.

Lenke til kommentar
Videoannonse
Annonse

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
Lenke til kommentar

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
Lenke til kommentar

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

Lenke til kommentar
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
Lenke til kommentar
  • 1 måned senere...

 

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?

Lenke til kommentar
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

 

Lenke til kommentar

 

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 :)

Lenke til kommentar
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
Lenke til kommentar

 

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.
Lenke til kommentar

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...