Citat:
Jag testade fseek funktionen manuellt genom att skriva offseten själv, och funktionen hittade inget förrän på offset = 5.
Så jag satte i = 5 för att börja iterera från 5, och fram tills det blev en new line.
Detta resulterade i följande kod:
Nu får jag åtminstone ut något, men jag inte riktigt sätta fingret på vad som händer.
Terminalen printar ut:
Varför hittar den inte "," och "7"?
Varför printar den en 12a men inget mer? 12an borde vara 7an. Kan inte 7 behandlas som en char?
Så jag satte i = 5 för att börja iterera från 5, och fram tills det blev en new line.
Detta resulterade i följande kod:
Kod:
int main() { #define MAX 1024 int i = 5; <------------- int len; char line[200]; char* token; int linecount = 5; int letter = 0; char ch[MAX]; FILE* fp; fp = fopen("C:/test/testfil.csv", "r"); while (letter != 0x0a) { letter = fgetc(fp); fseek(fp, -i, SEEK_END); //-i för att stega bakåt i raden printf("%c\t", letter); //printar varje char printf("%d\n", i); //printar varje iteration i++; } fclose(fp); }
Nu får jag åtminstone ut något, men jag inte riktigt sätta fingret på vad som händer.
Terminalen printar ut:
t 5
r 6
a 7
t 8
s 9
e 10
t 11
12
= tratset, nästan "testar7," baklänges, vilket jag förväntade mig.
r 6
a 7
t 8
s 9
e 10
t 11
12
= tratset, nästan "testar7," baklänges, vilket jag förväntade mig.
Varför hittar den inte "," och "7"?
Varför printar den en 12a men inget mer? 12an borde vara 7an. Kan inte 7 behandlas som en char?
Första t kommer från början av filen. Loopen är gjord så den slutar när den kommer till tecknet för ny rad. Programmet du har skrivit läser alltså första tecknet från filen, sedan börjar den en bit in från slutet, så den läser testar bakvägen, kommer sedan till tecknet för ny rad, och då avslutas programmet. Windows brukar köra med ascii 13 10 (både "carriage return" och "line feed") för ny rad. Antagligen är det 10, line feed, som gör att du får en ny rad innan den skriver ut värdet på i, som är 12.
Skulle gissa att det sista som står i filen är testar7,[13][10], så efter du har läst första tecknet i filen, så börjar du på position 5 bakifrån, som alltså är r i testar. Sedan läser du bakåt, tills du kommer till radbrytningen på raden där det gissningsvis står testar6,[13][10].
__________________
Senast redigerad av mulpac 2021-01-08 kl. 16:12.
Senast redigerad av mulpac 2021-01-08 kl. 16:12.