Det kommer an på hvordan filen er opbygget, men ellers betyder tegnet '\r' (så vidt jeg husker) linieskift. Så du tæller bare hvor mange af dem du har passeret og indlæser så linien. '\r'=13 (vistnok).
Nå nej, det behøver du vist ikke!
// Hvis du skal åbne linie 13: int linieNr = 13; char linie[MAX]; // NB: Sørg for at MAX er mindst lige så stor, som den længste linie i filen!!!! // Åben filpointer til filen her hvor denne kommentar står fopen("13.txt",filpointer); for(i=0; i<linieNr; i++) fgets(linie,filpointer); fclose(filpointer);
Det skal sandsynligvis rettes lidt til og syntaksen er nok heller ikke helt rigtigt (det er længe siden, at jeg har arbejdet med c), men princippet skulle være der og den 13. linie stå i strengen linie, når ovenstående er afsluttet.
Ellers skriv igen hvis ikke du kan få det til at virke.
if (linieLAEST) cprintf("Linie %d er læst i filen \'%s\' og indeholder:\r\n" "%.*s\r\n" /* Til Navn */ "%.*s\r\n" /* Til Adresse */ "%.*s\r\n", /* Til postnr. & by */ linienr, filnavn, sizeof(linie.Navn)-1, linie.Navn, sizeof(linie.Adresse)-1, linie.Adresse, sizeof(linie.PostNrBy)-1, linie.PostNrBy); else cprintf("Linie %d i filen \'%s\' kunne ikke læses.\r\n", linienr, filnavn);
return 0; }
Tricket med '%.*s' i do cprintf sikrer at der kun udskrives maximalt det antal tegn som feltet KAN indeholde. (Herved undgås ballade, hvis det sidste tegn i en af stregen ikke er '\x0'.)
Næh, det må være variablen soepro taler om, for der sluttes strenge altid med '\x0' (=0). Linier i en normal tekstfil slutter (som jeg startede med at skrive) med '\r' (=13).
Du kan IKKE bruge min metode, hvis filens linier IKKE har fast længde - så er bjarke's eksempel den rigtige måde.
Eneste anden måde, er at indlæses større blokke vha. min metode, og så manuelt gennemsøge disse blokke efter den søgte linie. Ved at øge længden på det der læses til f.eks. 32 KB vil funktionen performe bedre, da en alm. harddisk normalt læser 32 KB ad gangen. Under Win95 læses altid i blokke på 32 KB, og da windows selv laver "cache", så er genvinsten ved at læse 32 KB ad gangen umærkbar.
Ved brug af en tekststrøm er der normalt en entydig overensstemmelse mellem de tegn, der sendes fra programmets variabler og dem, der modtages af den ydre enhed. Der er to undtagelser fra denne regel: Tegnene for ny linie '\n' og for filslutmærket (tegn nr. 26 i tegntabellen) får en speciel behandling. Hvis tegnet '\n' sendes fra programmet, vil den ydre enhed modtage to tegn: '\r' (carriage return) og '\n' (line feed), der har henholdsvis nr. 13 og 10 i tegntabellen. Omvendt til tegnparret '\r', '\n' sendt fra en ydre enhed i programmet blive modtaget som ét tegn: '\n'. Dette spiller en vigtig rolle, når vi har at gøre med en DOS tekstfil, hvor vi skal have begge tegnene '\n' og '\r' for at gå til første position på næste linie.
det var det jeg ikke helt kunne huske, da jeg skrev ovenstående :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.