Page 2 of 2

Posted: 10/11-2011 22:37
by Nebuchadnezzar
settTidspunkt('timeplan.csv',2,2,'Fysikk')
??? Subscript indices must either be real positive integers or logicals.

Error in ==> settTidspunkt at 7
tp(tidsp,dag) = {fag};

--------------------------

Det var da som bare... Gud jeg er elendig i it...

Posted: 10/11-2011 22:41
by espen180
I så fall er feilen nok i linje 3. Prøv å fjerne denne.

Det som skjer er at du bytter ut tidsp (her 2) med tidsp-7 (her -5), som ikke er en gyldig indeksverdi.

Posted: 11/11-2011 00:04
by drgz
Nebuchadnezzar wrote:
function tp = settTidspunkt(tptab,dag,tidsp,fag)
tp = tpTilCell(tptab);
tidsp = tidsp-7;
if numel(tidsp) > 1
tp(tidsp,dag) = repmat({fag},numel(tidsp),1);
else
tp(tidsp,dag) = fag;
end
Trodde du sa du ikke skulle koke jeg ;)

Som jeg skrev da jeg limte inn koden her på forumet så går det an å gjøre masse sjekker for å sørge for at input er riktig (f.eks tok jeg utgangspunkt i at man ikke har timer før kl 8 (ergo -7 på indeks). Ellers var det en glipp der jeg glemte {} rundt "fag".

Posted: 11/11-2011 00:37
by Nebuchadnezzar
Sjekker om den kjører, kommer nok til å sitte oppe i natt for å skrive =)

Litt av problemet mitt, er at jeg ikke klarer å skrive CSV filen inn i en matrise som har domenet utenfor funksjonen.

Klipp og lim er en fin ting for å se hvordan ting fungerer

Tenkte time 1 2 3 4 jeg, jaja =)

Litt trøtt.

Posted: 11/11-2011 02:54
by Nebuchadnezzar
Fikser resten i morgen, dette var vanskelig

Posted: 11/11-2011 08:09
by drgz
Nebuchadnezzar wrote:Sjekker om den kjører, kommer nok til å sitte oppe i natt for å skrive =)

Litt av problemet mitt, er at jeg ikke klarer å skrive CSV filen inn i en matrise som har domenet utenfor funksjonen.
Du får jo tilbake en cell--array fra funksjonen, holder ikke det? Hvis du tror at du klarer å lage en "matrise" med strenger av forskjellig lengde så må du nok tro om igjen. ;) (Eneste måten å gjøre det på er å "padde" strengene med tomrom (whitespace) slik at de er like lange; da kan du få alle lagret i en "vanlig" matrise.)

F.eks

Code: Select all

a = 'bil';
b = 'sjokolade';
d = length(b)-length(a);
C = [b; a repmat(' ',1,d)];
Hvis du skal gjøre det på denne måten må du ha en variabel som hele tiden viser til lengden av den lengste strengen som allerede er i matrisen din (eventuelt et tall du vet er større enn enhver input). Så det går an, men i mine øyne en svært dårlig løsning, spesielt når man har muligheten til å bruke celler.

Posted: 11/11-2011 12:02
by Nebuchadnezzar
Tror jeg bare gir opp. Litt av problemet mitt er at jeg tror jeg ikke vet hva oppgaven spørr etter...


Litt av problemene mine er at alle disse funksjonene arbeider uavhengig av hverandre og i forhold til timplan.csv filen.

For eksempel, jeg kan fint laste den Timeplen.csv, inn i en celle. MEN denne cellen kan kun bli brukt inne i lastefunksjonen. Prøver jeg å gjøre noe frekt som

k = tpTilCeller('timeplan.csv')

også bruke k, videre fungerer ikke dette.

Dersom jeg skal lage en funksjon som tar inn en verdi, og putter denne inn i denne cellen. Går det fint. Men den blir ikke lagret! Neste gang henter bare lastefunksjonen samme CSV fil, som ikke er forandret...

Og det virker så merkelig at jeg skal lage tre funksjoner, som uavhengig av hverandre ikke fungerer.

Posted: 11/11-2011 12:23
by drgz
Nebuchadnezzar wrote:Tror jeg bare gir opp. Litt av problemet mitt er at jeg tror jeg ikke vet hva oppgaven spørr etter...
Det står jo ganske klart svart på hvitt hva de spør etter i oppgaveteksten.
Nebuchadnezzar wrote: For eksempel, jeg kan fint laste den Timeplen.csv, inn i en celle. MEN denne cellen kan kun bli brukt inne i lastefunksjonen. Prøver jeg å gjøre noe frekt som

k = tpTilCeller('timeplan.csv')

også bruke k, videre fungerer ikke dette.
Her tar du feil. Selvsagt kan du bruke k videre; hvis du ikke klarer det så gjør du noe veldig feil. Hvis jeg f.eks i kommandolinja skriver

k = tpTilCeller('timeplan.csv')

så har jeg fortsatt tilgang til variabelen k (ettersom den er lagret i workspace).
Nebuchadnezzar wrote: Dersom jeg skal lage en funksjon som tar inn en verdi, og putter denne inn i denne cellen. Går det fint. Men den blir ikke lagret! Neste gang henter bare lastefunksjonen samme CSV fil, som ikke er forandret...
Nei, funksjonen jeg skrev var kun for å lese csv-filen, konvertere til cellestruktur og endre timeplanen hvis ønskelig. Lagring til csv-fil igjen er noe du må skrive selv (hvis du ser på øvinga så er dette en egen deloppgave; jeg gav deg bare kode til de første to deloppgavene).
Nebuchadnezzar wrote: Og det virker så merkelig at jeg skal lage tre funksjoner, som uavhengig av hverandre ikke fungerer.
Det at du ikke får de til å fungere betyr ikke at de ikke fungerer.

Posted: 11/11-2011 15:23
by Nebuchadnezzar
Nå mener jeg at jeg har holdt på å skrive litt på første, og siste oppgave. Velger å ikke levere inn denne øvingen da, den ikke er obligatorisk og at jeg ikke fikk den til.

Setter jeg k = tpTilCeller('timeplan.csv')

Kan jeg bruke k videre, men dette er vel ikke en celle? men en eller annen form for matrise.

fungerer uansett ikke å skrive for eksempel

k(1,1) = [k Fysikk] eller k(1,1) = [k 'Fysikk']

Problemet mitt er at hver gang jeg forandrer en linje i timeplanen, så forandrer den bare denne linjen.

For eksempel kjører jeg først at den skal forandre
gjøre mandag 3time fra fysikk til matte

også tirsdag 2time fra exphil til fysikk

Så vil den hver gang hente ut CSV filen, og ikke en cellematrise. Og ejg får heller ikke lagret hver endring. Skal se på det senere, tror jeg slapper av med litt fysikk først.

Posted: 11/11-2011 18:37
by drgz
Nebuchadnezzar wrote:Nå mener jeg at jeg har holdt på å skrive litt på første, og siste oppgave. Velger å ikke levere inn denne øvingen da, den ikke er obligatorisk og at jeg ikke fikk den til.

Setter jeg k = tpTilCeller('timeplan.csv')

Kan jeg bruke k videre, men dette er vel ikke en celle? men en eller annen form for matrise.

fungerer uansett ikke å skrive for eksempel

k(1,1) = [k Fysikk] eller k(1,1) = [k 'Fysikk']

Problemet mitt er at hver gang jeg forandrer en linje i timeplanen, så forandrer den bare denne linjen.

For eksempel kjører jeg først at den skal forandre
gjøre mandag 3time fra fysikk til matte

også tirsdag 2time fra exphil til fysikk

Så vil den hver gang hente ut CSV filen, og ikke en cellematrise. Og ejg får heller ikke lagret hver endring. Skal se på det senere, tror jeg slapper av med litt fysikk først.
Jeg tror du bør lese litt mer i læreboka om de forskjellige datatypene i Matlab, eventuelt bruke mer tid på å lese i dokumentasjonen som følger med programmet (f.eks om cell-arrays og indeksering). Når du har gjort og forstått mer av det vil du se hvor feil det du prøver på i eksempelet over er.

Posted: 11/11-2011 19:34
by drgz

Code: Select all

function lagreTimeplan(tp,filnavn)
[fid err] = fopen(filnavn,'w');
if ~isempty(err)
    error(err);
end

for k = 1:5
    fagStr = char(tp(:,k));
    for m = 1:8
        fag = strtrim(fagStr(m,:));
        if ~isempty(fag)
            fprintf(fid,'%s',fag);
        end
        if m < 8
            fprintf(fid,',');
        end
    end
    if k < 5
        fprintf(fid,'\n');
    end
end
fclose(fid);
end

Code: Select all

function printTimeplan(tp)

dager = {'Mandag' 'Tirsdag' 'Onsdag' 'Torsdag' 'Fredag'};
klSlett = {'0800' '0900' '1000' '1100' '1200' '1300' '1400' '1500' '1600'}';
for k = 1:5
    idx = strcmpi(tp(:,k),'');
    if sum(idx) == 8
        continue;
    else
        dagStr = [char(klSlett(~idx)) repmat(' - ',length(idx(~idx)),1) char(tp(~idx,k))];
    end
    disp([dager{k} ':']);
    disp(dagStr);
    disp(' ');
end
end