kimare Skrevet 9. september 2014 Del Skrevet 9. september 2014 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);34 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);34 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
snippsat Skrevet 10. september 2014 Del Skrevet 10. september 2014 (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 10. september 2014 av snippsat 1 Lenke til kommentar
kimare Skrevet 10. september 2014 Forfatter Del Skrevet 10. september 2014 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. Lenke til kommentar
snippsat Skrevet 10. september 2014 Del Skrevet 10. september 2014 (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 10. september 2014 av snippsat 1 Lenke til kommentar
kimare Skrevet 10. september 2014 Forfatter Del Skrevet 10. september 2014 Supert ser om jeg får tid til å teste i kveld. Melder fra når jeg har prøvd. Lenke til kommentar
kimare Skrevet 10. september 2014 Forfatter Del Skrevet 10. september 2014 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
snippsat Skrevet 10. september 2014 Del Skrevet 10. september 2014 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 1 Lenke til kommentar
kimare Skrevet 11. september 2014 Forfatter Del Skrevet 11. september 2014 Da var den i boks. Tusen takk for hjelpa. Lenke til kommentar
kimare Skrevet 24. oktober 2014 Forfatter Del Skrevet 24. oktober 2014 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
snippsat Skrevet 25. oktober 2014 Del Skrevet 25. oktober 2014 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
kimare Skrevet 25. oktober 2014 Forfatter Del Skrevet 25. oktober 2014 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
snippsat Skrevet 26. oktober 2014 Del Skrevet 26. oktober 2014 (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 26. oktober 2014 av snippsat Lenke til kommentar
kimare Skrevet 27. oktober 2014 Forfatter Del Skrevet 27. oktober 2014 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå