jdawg Skrevet 23. februar 2010 Del Skrevet 23. februar 2010 Hei. Til masteroppgaven min har jeg en hel del data (noen tusen filer) som skal normaliseres. For å slippe å åpne hver eneste fil i textpad og importere til exel (noe som vil ta år og dag)tenkte jeg å prøve å lage et program i matlab som importerer alle filene samt henter ut de dataene jeg trenger. Problemet er at jeg ikke er veldig dreven i hverken matlab eller programmering generellt, men har brukt det noe tidligere. Første problem jeg har støtt på er å importere filene og hente ut ønskede data. Filene inneholder 21 linjer med tekst først, så noen hundre/tusen linjer med data, for å så følges av noen linjer tekst på bunnen. Det er kun dataene jeg er interessert i. Et annet problem er at de forskjellige filene ikke nødvendigvis inneholder like mange linjer med data, de varierer. Noen som har noen hint? På forhånd takk Legger også ved et eksempel på en av filene jeg skal bruke (egentlig filendelse er *.mwd, men det får jeg ikke lastet opp her) test.txt Lenke til kommentar
NevroMance Skrevet 24. februar 2010 Del Skrevet 24. februar 2010 Ser ikke for meg at matlab er det som er mest egnet til dette. Ville kanskje sett på python istede. Matlab er veldig egnet for matematiske operasjoner, spesielt vektorevaluerte funksjoner, men IO, løkker osv. er ikke den sterkeste siden til Matlab. Hvis du likevel vil bruke matlab, se: http://www.mathworks.com/support/tech-notes/1400/1403.html For python ville jeg lest en og en linje til jeg leste linjen [MWD DATA]. Deretter lese en linje, og lese datane frem til du kommer til [EXTRA INFO]. Kan til og med hende python har egne biblioteker for å lese MWD filer, samt for å skrive excel filer. Lenke til kommentar
Zalo Ultra Skrevet 24. februar 2010 Del Skrevet 24. februar 2010 matlab knuser denne oppgaven lett. du er kjent med fopen() ? Lenke til kommentar
jdawg Skrevet 25. februar 2010 Forfatter Del Skrevet 25. februar 2010 matlab knuser denne oppgaven lett. du er kjent med fopen() ? ja tror nok matlab skal være helt kurrant til denne oppgaven. jeg er kjent med fopen ja, men det er jo kun for å åpne filen(?), og det går greit, problemet er det å velge ut de riktige dataene. hvordan funker textscan() til dette? har forsøkt litt men får det ikke helt til å funke. sikkert bare noen små detaljer. takk for svar, men kom gjerne med mer inputt :!: Lenke til kommentar
x871kx6167ss7 Skrevet 25. februar 2010 Del Skrevet 25. februar 2010 Dersom du har tilgang til et unix-shell, så vil "tail -n +21 filnavn.txt > resultat.txt" fjerne de første 21 linjene. Lenke til kommentar
jdawg Skrevet 25. februar 2010 Forfatter Del Skrevet 25. februar 2010 har ikke tilgang til unix shell... det skal nok gå fint å gjøre det her i matlab, så satser på det Lenke til kommentar
jdawg Skrevet 25. februar 2010 Forfatter Del Skrevet 25. februar 2010 Så langt har jeg kommet hit: r=0; x=0; % Open Data File fid = fopen('test.mwd','r'); while(x~=(-1))%whileløkke som finner antall linjer med data i Mwd-filene x=fgetl(fid); r=r+1; end r = r-1; a=r-30; disp(['Number of rows = ' num2str(a)]) name = textscan(fid,'\n', -1, 'delimiter', ' ', 'headerlines', 22); % Filter out string at beginning of line fclose(fid); disp(' ') disp('Strings read in successfully:') disp('Her vil jeg skrive ut tallene som står i første linje' names) Her får jeg skrevet ut antall linjer med data. Om jeg har names i siste "disp" får jeg også ut de riktige dataene i første linje. men det krøller seg... skulle gjerne hatt en liste (tall-array, til å begynne med) istedentfor cell-array. Hvordan gjør jeg dette? Prøvd å søke på Matlab central og brukt help funksjonen, men tar enormt mye tid... Lenke til kommentar
asicman Skrevet 26. februar 2010 Del Skrevet 26. februar 2010 Så langt har jeg kommet hit: scanf er kanskje greiest her. Dette burde gjøre jobben. Kall den med arr=read_test(22,'test.txt'); arr vil deretter inneholde alle verdiene: function arr=read_test(nlines,filename) fd=fopen(filename,'r'); % skip first nlines for row = 1:nlines textline = fgets(fd); end arr= fscanf(fd,'%d %g %g %g %g %g %g %g %g %2d:%2d:%2d', [12 inf])'; fclose(fd); 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å