Avatar billede xited Praktikant
25. februar 2007 - 13:47 Der er 13 kommentarer og
1 løsning

system() kald med variable

Hejsa,

Jeg har nogle variable jeg gerne vil indlæse i en fil automatisk!

Jeg har denne stump kode:

system("echo \'Section \"InputDevice\"\n\tIdentifier\t\"WizardPen Tablet\"\n\tOption\t\t\"SendCoreEvents\"\t\"true\"\n\tDriver\t\t\"wizardpen\"\n\tOption\t\t\"Device\"\t\"%s\"\n\tOption\t\t\"TopX\"\t\t\"%d\"\n\tOption\t\t\"TopY\"\t\t\"%d\"\n\tOption\t\t\"BottomX\"\t\"%d\"\n\tOption\t\t\"BottomY\"\t\"%d\"\n\tOption\t\t\"MaxX\"\t\t\"%d\"\n\tOption\t\t\"MaxY\"\t\t\"%d\"\nEndSection\n\n \' > file");

Kan det gøres smartere, og hvordan inkluderer jeg disse variable:

filename (%s),TopX (%d),TopY (%d),BottomX (%d),BottomY (%d),BottomX (%d),BottomY (%d)

???

På forhånd tak!
Avatar billede arne_v Ekspert
25. februar 2007 - 14:38 #1
det er ret almindeligt at bruge:

char cmd[1024];
sprintf(cmd,"...",...);
system(cmd);

til at få variable med i en komamndo
Avatar billede xited Praktikant
25. februar 2007 - 17:49 #2
Det kræver vist en lille uddybende forklaring...

Jeg er ret "grøn" hvad angår C!

En reference til en "beginners guide" ville heller ikke være ringe... Har søgt på google, men de fleste guides jeg støder ind i, antager at man har en basal viden indenfor området, hvilket ikke er tilfældet!
Avatar billede xited Praktikant
25. februar 2007 - 17:54 #3
Jeg har dette:

    printf(
        "Section \"InputDevice\"\n"
        "\tIdentifier\t\"WizardPen Tablet\"\n"
        "\tOption\t\t\"SendCoreEvents\"\t\"true\"\n"
        "\tDriver\t\t\"wizardpen\"\n"
        "\tOption\t\t\"Device\"\t\"%s\"\n"
        "\tOption\t\t\"TopX\"\t\t\"%d\"\n"
        "\tOption\t\t\"TopY\"\t\t\"%d\"\n"
        "\tOption\t\t\"BottomX\"\t\"%d\"\n"
        "\tOption\t\t\"BottomY\"\t\"%d\"\n"
        "\tOption\t\t\"MaxX\"\t\t\"%d\"\n"
        "\tOption\t\t\"MaxY\"\t\t\"%d\"\n"
        "EndSection\n\n",
        filename,
        TopX, TopY,
        BottomX, BottomY,
        BottomX, BottomY
    );

...som outputter til stdout, men jeg vil istedet gerne læse det over i en fil...
Avatar billede arne_v Ekspert
25. februar 2007 - 18:04 #4
FILE *fp = fopen("foobar.txt", "wt");
    fprintf(fp,
        "Section \"InputDevice\"\n"
        "\tIdentifier\t\"WizardPen Tablet\"\n"
        "\tOption\t\t\"SendCoreEvents\"\t\"true\"\n"
        "\tDriver\t\t\"wizardpen\"\n"
        "\tOption\t\t\"Device\"\t\"%s\"\n"
        "\tOption\t\t\"TopX\"\t\t\"%d\"\n"
        "\tOption\t\t\"TopY\"\t\t\"%d\"\n"
        "\tOption\t\t\"BottomX\"\t\"%d\"\n"
        "\tOption\t\t\"BottomY\"\t\"%d\"\n"
        "\tOption\t\t\"MaxX\"\t\t\"%d\"\n"
        "\tOption\t\t\"MaxY\"\t\t\"%d\"\n"
        "EndSection\n\n",
        filename,
        TopX, TopY,
        BottomX, BottomY,
        BottomX, BottomY
    );
    fclose(fp);
Avatar billede arne_v Ekspert
25. februar 2007 - 18:04 #5
char cmd[1024];
sprintf(cmd,"copy %s %s",fromfnm,tofnm);
system(cmd);
Avatar billede xited Praktikant
25. februar 2007 - 18:41 #6
Hvordan tilføjer jeg noget til fp, uden at overskrive det der er?
Avatar billede arne_v Ekspert
25. februar 2007 - 18:58 #7
FILE *fp = fopen("foobar.txt", "at");
Avatar billede xited Praktikant
25. februar 2007 - 20:09 #8
Tak for hjælpen! - Point?

Kan man søge efter en streng, og indsætte en linje efter dette søgeresultat?
Avatar billede arne_v Ekspert
25. februar 2007 - 20:20 #9
gerne
Avatar billede arne_v Ekspert
25. februar 2007 - 20:21 #10
du kan søge efter en streng ved at læse igennem filen og sammenligne data

du kan ikke indsætte en linie midt i en tekst fil, men du kan med
lidt finesse genskrive fra et bestemt sted i filen og til enden af filen

overvej dog om ikke en database var bedre hvis du har brug for den slags
Avatar billede xited Praktikant
25. februar 2007 - 20:29 #11
Jeg vedligeholder en guide til opsætning af en tablet under Linux.

Se: https://help.ubuntu.com/community/TabletSetupWizardpen

Folk er glade for guiden, men det ville være rart at kunne cutte den ned i størrelse, og gøre det meste af opsætningen automatisk. Det gør det mere imødekommende for brugerne, og jeg får knap så mange henvendelser og fejl :)

Så C-programmet skal altså gå ind og redigere i folks konfigurations-filer, og lignende...
Avatar billede xited Praktikant
25. februar 2007 - 20:31 #12
...jeg fik ikke sagt at jeg også har overtaget det "døde" Wizardpen Linux tablet driver projekt, og kan derfor lave disse setup-tiltag direkte under brugerens opsætning af driveren!
Avatar billede xited Praktikant
25. februar 2007 - 20:38 #13
...og jeg vil i andre sammenhænge gerne slette en linje i en fil, her tænker jeg specielt på /etc/rc.local (se evt. guiden) hvor jeg vil slette "exit 0" indsætte det der nu skal indsættes, og indsætte "exit 0" igen... Hvordan gør jeg det nemmest?
Avatar billede arne_v Ekspert
25. februar 2007 - 20:49 #14
min anbefaling vil være at læse fra den gamle config fil og skriv til en ny config
fil - når det er ordnet sletter du den gamle og renamer den nye til at hedde det rigtige

det er langt sikrere end at rette on the fly i en fil
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