Gå til innhold

Skrive informasjon i excel fra.txt-filer


Anbefalte innlegg

Sitter med masteroppgaven min, og har endelig fått tak i datamaterialet jeg trenger. Problemet er at jeg trenger det i excelformat, men har fått tak i det i separate .txt-filer, separert etter dato.

 

Det jeg trenger fra tekstfilene er to tall (kanskje flere), og de er lokalisert på lik plassering i alle tekstfilene. Tekstfilene er navngitt likt, med unntak av datoen i navnet.

 

Ettersom det er vanvittig mange slike filer, vil det ta enormt langt tid å punshe alt manuelt, så det jeg lurer på er om det går an å skrive en makro i excel som henter ut de to tallene jeg trenger i hver enkel tekstfil, og skriver de ut i excel automatisk? Dette hadde spart med for mange dager/uker med arbeid.

Lenke til kommentar
Videoannonse
Annonse

Takk for kjapt svar.

 

Poenget er at det er enormt mange filer, så å importere en og en, for så å fjerne overflødig data er like tidskrevende som å hente ut tallene jeg trenger for så å punche de inn manuelt. Jeg sliter også med at hver tekstfil som importeres åpnes i hvert sitt spreadsheet. Jeg trenger enkelttall fra hver fil inn i samme spreadsheet.

 

Derfor tror jeg den enkleste måten å få dette til er via en makro. De to måtene jeg kan se for meg vil fungere er at makroen


  •  
  • går inn i tekstfilene og henter tallene for så å skrive ut i excel
  • eller at den konverterer tekstfilene til excelformat, finner de respektive tallene, for så å skrive de ut i et felles spreadsheet.

 

Problemet mitt ligger i at jeg ikke kan skrive makrokoder, og derfor søker hjelp her.

 

Vedlagt ligger en av disse tekstfilene jeg skal hente informasjon fra. De tallene jeg er ute etter er i første omgang:

 


  •  
  • Fund data for: 20120220
  • NAV per share: 18.9252 NOK

xactderivatbear(obx)20120220.txt

Lenke til kommentar

Når man ikke er så dreven i Excel - noe som er en god beskrivelse på meg selv - så er det naturlig å tenke i retning av en eller annen form for pre-prosessering av dataene før de importeres inn i Excel.

 

For ca. 10 år siden brukte jeg awk til å ekstrahere data fra dusinvis av tekstfiler. De ekstraherte datene ble lagt til på slutten av en output-fil, slik at jeg til slutt satt igjen med én tekstfil med data. Denne filen (som inneholdt én linje pr. opprinnelig tekstfil, og 4 dataverdier pr. linje), ble så importert inn i Excel hvor jeg enkelt kunne tegne opp grafer og utføre beregninger på grunnlag av de importerte dataene.

 

awk er opprinnelig et Unix-program, men finnes også for andre plattformer. (Jeg har også brukt det i Windows.)

Et lite shell script (batch-fil) sørget for at det samme awk-scriptet ble kjørt på alle input-filene, og de ekstraherte data ble lagt til en output-fil.

 

Det finnes sikkert gode (og kanskje bedre) alternativer der ute, men awk gjorde jobben for meg.

awk fungerer på den måten at det leser inn linje for linje fra input-filen (eller stdin på Unix) og sammenligner den med ett eller flere definerte 'patterns'. Hvis det er en match, så utføres en tilhørende kommando, f.eks. at det skrives ut en formatert linje til stdout (output-filen), eller en innlest dataverdi lagres midlertidig, for så å bli skrevet ut i en senere omgang etter at man har fått match på et annet pattern. Wikipedia har mer.

Lenke til kommentar

 

Vedlagt ligger en av disse tekstfilene jeg skal hente informasjon fra. De tallene jeg er ute etter er i første omgang:

 


  •  
  • Fund data for: 20120220
  • NAV per share: 18.9252 NOK

 

Kjører jeg dette bash-skriptet (i linux)...

 

for i in $(ls *.txt); do
  DATO=$(grep Fund $i | grep -v divisor | cut -d":" -f2 | sed 's/[ \t]//g')
  NAV=$(grep NAV $i|cut -d":" -f2 | sed 's/[ \t]//g' | sed 's/NOK.*$//')
  echo $DATO,$NAV
done

 

...i en katalog som inneholder tekstfila di, får jeg følgende resultat:

 

20120220,18.9252

 

Kan garantert gjøres penere og renere, men burde være enkelt å importere som kommaseparert data i Excel.

Edit: skriptet kjører ut tall fra samtlige .txt-filer som ligger i mappa.

Endret av pie0pah
  • Liker 1
Lenke til kommentar

Det der ser ut som noe som kan fungere pie0pah! Problemet er bare at jeg verken kan linux eller har noe som helst kunnskaper rundt bash-skript.

 

Har 3 kataloger (3 fond) som skal hentes ut informasjon om. Det er hhv ca 1740, 1000 og 1000 enkeltdager i hver av disse. Hvor lang tid vil det ta for dette scriptet å hente ut informasjonen fra filene? Vil det være vanskelig å addere mere informasjon som skal hentes ut (4 tall i stedet for 2)?

Lenke til kommentar

Det der ser ut som noe som kan fungere pie0pah! Problemet er bare at jeg verken kan linux eller har noe som helst kunnskaper rundt bash-skript.

 

Har 3 kataloger (3 fond) som skal hentes ut informasjon om. Det er hhv ca 1740, 1000 og 1000 enkeltdager i hver av disse. Hvor lang tid vil det ta for dette scriptet å hente ut informasjonen fra filene? Vil det være vanskelig å addere mere informasjon som skal hentes ut (4 tall i stedet for 2)?

 

Ypperlig anledning til å lære litt om linux altså ;)

 

Pc-en min bruker 15 sekunder på å hente ut to tall fra 1000 filer hver, så om de to andre tallene ikke er vanskeligere å hente ut, tar det drøyt to minutter å tygge gjennom alle 3700 filene.

 

Hvilke andre tall er det du ønsker å hente ut?

  • Liker 1
Lenke til kommentar

Tror det går kjappere for meg å legge inn alle de 3700 linjene for hånd, enn å lære meg linux. Hehe.

 

Tar meg den friheten å dele datasettene her. Det jeg ønsker å hente ut er:

 

Fra XACT OBX (tall fra de tre første linjene):


  •  
  • Fund data for: xxx
  • NAV per share: xxx
  • Index value / 10: xxx

 

Fra XACT BULL og XACT BEAR (tall fra de to første, linje 5 og de to siste linjene):


  •  
  • Fund data for: xxx
  • NAV per share: xxx
  • Outstanding Units: xxx
  • Nominal xxx
  • Close xxx (denne endres til "Settle close" den 28.12.11)

 

Er det mulig å sortere ut disse på samme måte som beskrevet over?

XACT OBX - txt.rar

XACT BEAR - txt.rar

XACT BULL - txt.rar

Lenke til kommentar

Tror det går kjappere for meg å legge inn alle de 3700 linjene for hånd, enn å lære meg linux. Hehe.

 

Tar meg den friheten å dele datasettene her. Det jeg ønsker å hente ut er:

 

Fra XACT OBX (tall fra de tre første linjene):


  •  
  • Fund data for: xxx
  • NAV per share: xxx
  • Index value / 10: xxx

 

Fra XACT BULL og XACT BEAR (tall fra de to første, linje 5 og de to siste linjene):


  •  
  • Fund data for: xxx
  • NAV per share: xxx
  • Outstanding Units: xxx
  • Nominal xxx
  • Close xxx (denne endres til "Settle close" den 28.12.11)

 

Er det mulig å sortere ut disse på samme måte som beskrevet over?

 

Ser ut som det gikk greit, du får sjekke resultatfilene. Selve kjøringa tok bare to og et halvt minutt, men jeg brukte sikkert en halvtime på å finne en irriterende feil i skriptet mitt ;)

resultat.rar

  • Liker 1
Lenke til kommentar

Ser ut som det gikk greit, du får sjekke resultatfilene. Selve kjøringa tok bare to og et halvt minutt, men jeg brukte sikkert en halvtime på å finne en irriterende feil i skriptet mitt ;)

 

Helt konge! Viste seg å være en svært enkel sak å adskille i excel. Tok noen stikkprøver, og ser helt ypperlig ut. Mange tusen takk for at du tok deg tid til å hjelpe en stakkars med denne jobben. Kan ikke få uttrykt nok hvor mye tid jeg har spart!

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