Læse sekvens fra fil, for derefter at slå en værdi op i en anden
Jeg har forsøgt at skrive en del af et program, som har den funktion at den læser en fil, som den så deler op i mindre bider af tre bogstaver. Hver af disse bider, på tre bogstaver, bliver så slået op i en anden fil, som giver den bid en værdi.
Jeg forestiller mig at sådan en funktion læser de tre første bogstaver, slår den op i en anden fil, skirver værdien ind i en array, og forsætter med de næste tre bogstaver i rækken.
Jeg har prøvet mig lidt frem, men får problemer når jeg skal sammenligne et stykke med en sekvens, samt har jeg ingen idé om hvordan man slår sådan en bid op.
Der er flere ubekendte i din beskrivelse, men lad os tage det fra en ende af.
At læse tre bogstaver fra den ene fil bør ikke volde problemer. Brug en std::ifstream og dens get metode til at læse med.
Det næste er så at "slå op" i den anden fil. Det kan man gøre ved at læse en "record" af gangen og sammenligne med de tre bogstaver. En record er i dette tilfælde en kombination af tre bogstaver og den associerede værdi. Det er igen forholdsvis enkelt, men kan tage lidt lang tid.
Du kan også læse den anden fil én gang for alle og gemme det hele i en container. Her vil en std::map være på sin plads.
Hvis du fortæller hvordan de to filer ser ud, og hvordan definitionen af "værdien" ser ud, kan jeg komme med et mere kvalificeret svar.
# læs nøglerne ind og split dem op i længder af 3. text = open("keys.txt") text = text.read() keys = [text[x:x + 3] for x in range(0, len(text)-1, 3)]
# generer test data # filformat # adb, 0 # asd, 1 # kym, 2 # ... if test: text = open("lookup.txt","w") for ix, key in enumerate(keys): text.write("%s, %s\n" % (key, ix)) text.close()
# læs lookupfil ind i et dictionary med navnet lookup text = open("lookup.txt","r") lookup = {} x = text.readline().strip() while x: key,val = x.split(",") lookup[key] = val x = text.readline().strip()
# udskriv koderne ved opslag i lookup for key in keys: print lookup.get(key, "Notfound %s" % key)
Den første fil, som den skal læse fra, indeholder en masse bogstaver som fx "AAACCCGTTGCT..." Det den så gør er at slå AAA op og give den en tal (int) værdi, gå videre til CCC og give den en anden talværdi. og det forsætter den så med. Den anden fil ved jeg ikke helt hvordan jeg skal udforme, da den bare indeholder sekvenser af tre bogstaver som har hvert deres talværdi.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.