Avatar billede the_kid Nybegynder
21. juli 2003 - 10:39 Der er 16 kommentarer og
1 løsning

tilføje linje til fil

Hvordan får jeg den til at skrive en linje til en allerede existerende fil ? den må dog ikke tilføje linjen til filen, hvis den existere.
please help :-)
Avatar billede medions Nybegynder
21. juli 2003 - 10:43 #1
Avatar billede the_kid Nybegynder
21. juli 2003 - 11:01 #2
tak, mangler stadigvæk så den ikke skriver den samme linje flere gange.
Avatar billede medions Nybegynder
21. juli 2003 - 11:02 #3
Hvilken compiler bruger du?

//>Rune
Avatar billede the_kid Nybegynder
21. juli 2003 - 11:07 #4
Dev-C++ og/eller Microsoft Visual Studio.NET 2003
Avatar billede medions Nybegynder
21. juli 2003 - 11:15 #5
Fil = fopen("c:\fil.fil","a")

//>Rune
Avatar billede medions Nybegynder
21. juli 2003 - 11:17 #6
a står for Append!

Thx 4 Poinz

//>Rune
Avatar billede the_kid Nybegynder
21. juli 2003 - 11:19 #7
Vil dette kunne bruges ? og hvad står b for?

  Fil = fopen("c:/Fil.fil", "w+b+a");
Avatar billede medions Nybegynder
21. juli 2003 - 11:21 #8
Uha, kan jeg sq ik' lige huske :-(
Men prøv at slå fopen op i referencen!

//>Rune
Avatar billede arne_v Ekspert
21. juli 2003 - 11:35 #9
b står for binary.

Og skal næppe bruges i denne sammenhæng.
Avatar billede medions Nybegynder
21. juli 2003 - 13:52 #10
Hmm min fejl then!

//>Rune
Avatar billede sovsekoder Nybegynder
21. juli 2003 - 13:56 #11
for at svare på spørgsmålet: ..<snip snip>...den må dog ikke tilføje linjen til filen, hvis den existere.

her er koden: (stil endelig sprøgsmål :-o) compilet med MSVC (microsoft)

#include <fstream.h>
#include <string.h>

int main(int argc, char* argv[])
{
    //indlæs tekst
    char strInText[200];
    char strFilename[]={"test.txt"};
    cin >> strInText;   
    //åben fil
    ifstream file(strFilename, ios::binary);
    char c;
    int i=0;
    bool bLineFound=true, bNotEof;
    //gennemløb fil
    while( bNotEof=(file.read(&c, 1)!=NULL) ) {
        //har vi læst en linie ind?
        if(c==0x0a || c==0x0d) {
            if(i!=0) {
                if(bLineFound) {
                    cout << "\nlinie findes allerede!\n";
                    break;
                }
            }
            i = 0;
            bLineFound=true;
        }
        else {
            //compare line
            if(strInText[i]!=c) bLineFound=false;
            i++;
        }
        //udkommenter nedenstående for at se filens indhold
        //cout << c;
    }
    file.close();
    if(!bNotEof) {
        //tilføj nye tekst til fil
        ofstream fileappend(strFilename, ios::binary | ios::app);
        strcat(strInText, "\r\n");
        fileappend.write(strInText, strlen(strInText));
        fileappend.close();
    }
    return 0;
}
Avatar billede sovsekoder Nybegynder
21. juli 2003 - 13:58 #12
for god ro og orden :
bNotEof burde nok hede bTextFound
efter oprettelse af ofstream og ifstream bør man teste om det gik godt med file.is_open()..

mvh Sovsekoder
Avatar billede sovsekoder Nybegynder
21. juli 2003 - 14:00 #13
filen læses igennem byte for byte, hver linie sammenlignes med indstrengen - hvis der findes et match hopper den ud af while-løkken og slutter. Hvis linien ikke findes går den ind i den sidste if betingelse (if(bNotEof)...), her appendes den nye linie...
Avatar billede medions Nybegynder
21. juli 2003 - 14:05 #14
sovsekoder> Vil du ik' lige kontakte mig på rune@medions.dk

//>Rune
Avatar billede sovsekoder Nybegynder
21. juli 2003 - 14:14 #15
det bedste er nu at poste, her i denne tråd - så folk kan få glæde af det.. - men det kan vi vel oxo gøre bagedder - (bagefter)
Avatar billede arne_v Ekspert
21. juli 2003 - 14:31 #16
sovsekoder>

Jeg vil kalde det meget dårlig stil at læse text filer binært
og teste på <CR> eller <LF>.
Avatar billede sovsekoder Nybegynder
21. juli 2003 - 14:41 #17
lol, arne :-) point taken ;)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester