udvidet spørgsmål til indlæsning af speciel tekstfil

Tags:    c++

hej

jeg sidder med nøjagtig samme tekst fil som der er vist i spørgsmålet stillet af Christopher von Würden. jeg sidder bare med et andet problem. jeg har fået til opgave at indlæse alle retningsobservationer og udskrive dem til en anden tekstfil. retningsobservationer har id-nummer:

1
1
2

hvis man har læst spørgsmålet vil man også se at der forekommer noget der hedder forkortet retningsobservationer, som har id-nummer:

1
2

forkortet retningsobservationer, må kun forekomme såfremt der har været en retningsobservation før. det vil sige at man må godt have tilfældet:

1 702.00
1 15.00
2 0.000
1 14.00
2 19.480

man må også godt have tilfældet:

1 14.00
2 19.480
1 702.00
1 15.00
2 0.000

min opgave er at scanne hele tekstfilen igennem, finde alle retningsobservationer, og forkortet retningsobservationer og udskrive dem til en anden tekstfil. problemet er bare at der er ikke nogen bestemt rækkefølge observationerne kommer i, og jeg har ikke været i stand til at scanne alle observationerne ind korrekt. hvis der er nogen der har et forslag til en maskine der kan gå ind i tekstfilen, og finde alle retningsobservationer, plus forkortet retningsobservationer, og skrive dem ud til en ny tekstfil, ville det være til stor hjælp.

hvis i ikke kan finde tekstfilen er den på linket

http://peecee.dk/upload/download/112185





Hvis du starter med at oprette et flag:

bool longSeqFound = false;

og sætter dette flag til true når du finder den lange sekvens
case 2: // 1-1-2
longSeqFound = true;

Så laver du to adskilte dele i ValidSeq:

bool ValidSeq(std::list<Data>& seq)
{
if(longSeqFound == false)
{ // ca den øverste halvdel af kode du har nu
}
else
{ // noget kode der ligner det ovenfor men kun kikker efter korte sekvenser
}
}

Husk at holde styr på længden af seq, hvis ikke flaget er sat skal længden gro til 3 hvis flaget er sat skal længden kun være 2


jeg har lavet en kode der ser således ud:

Fold kodeboks ind/udKode 


jeg har testet den, den skriver alle de forkortet retningsobservationer ud, problemet er bare at den skrive det samme ud 2 gange. altså


7 1 702
8 1 15
9 2 0

8 1 15
9 2 0

10 1 14
11 2 19.48

er det noget jeg kan rette eller skal jeg bruge et flag?




Hvis du starter med at oprette et flag:

bool longSeqFound = false;

og sætter dette flag til true når du finder den lange sekvens
case 2: // 1-1-2
longSeqFound = true;

Så laver du to adskilte dele i ValidSeq:

bool ValidSeq(std::list<Data>& seq)
{
if(longSeqFound == false)
{ // ca den øverste halvdel af kode du har nu
}
else
{ // noget kode der ligner det ovenfor men kun kikker efter korte sekvenser
}
}

Husk at holde styr på længden af seq, hvis ikke flaget er sat skal længden gro til 3 hvis flaget er sat skal længden kun være 2


jeg har prøvet at køre dit program igennem, men lige så snart den når over linje 9 crasher programmet



"mit program"?

Lad mig se hvordan dit program ser ud.



"mit program"?

Lad mig se hvordan dit program ser ud.


sorry, talefejl:

Fold kodeboks ind/udKode 




Ved første øjekast du har

lseq2.push_back(*ir);
...
std::cout<<lseq[0].nr<<" "<<lseq[0].id<<" "<<lseq[0].val<<std::endl;


Dvs. du push'er på lseq2, men udskriver fra lseq ...



Ved første øjekast du har

lseq2.push_back(*ir);
...
std::cout<<lseq[0].nr<<" "<<lseq[0].id<<" "<<lseq[0].val<<std::endl;


Dvs. du push'er på lseq2, men udskriver fra lseq ...


status er nu at jeg har følgende kode:

Fold kodeboks ind/udKode 


men når jeg udskriver får jeg bare alle linjerne i inddata udskrevet. mystisk:|



Jeg kunne godt tænke mig at se din main(), specielt for at se om du får fjernet de rigtige elementer fra seq

Og så skal du returnere false i slutningen af ValidSeq funktionen.



Jeg kunne godt tænke mig at se din main(), specielt for at se om du får fjernet de rigtige elementer fra seq

Og så skal du returnere false i slutningen af ValidSeq funktionen.


jeg beklager endnu en gang. min main funktion ser således ud:

Fold kodeboks ind/udKode 


når jeg kompiler nu når den kun til linje 9, men programmet crasher ikke. efter linje 9 sker der ikke mere i programmet.



Hvis du har fundet den lange sekvens skal du holde længden på seq på 2 i stedet for 3.



Hvis du har fundet den lange sekvens skal du holde længden på seq på 2 i stedet for 3.


jeg har følgende program nu:

Fold kodeboks ind/udKode 


men når jeg kører programmet når den ikke længere end til linje 9. så stopper programmet. men hvis jeg bare i den forkortet retning bare skriver case 1 og case 2, vil den tage de 2 sidste rækker i den lange retningsobservation, og sætte som forkortet. så den ikke får de observationer som faktisk er forkortet:|. hvis jeg kunne finde en måde hvorpå den springer de 2 sidste linjer over i den lange retnigsobservation, også kun tager de korte.



t