2024. november 24., vasárnap

Informatika

Adott napon: 
Keresés:
#6861
Ha csak a filenevet adod meg, a fileoknak ugyanabban a könyvtárban kell lenniük, mint a programnak. Ha máshol vannak, add meg a teljes elérési utat, különben jön a no such file or directory hiba.
A const char* input[]={"nev1", "nev2", "nev3"}; ertekadas igy jo, ahogy írtad, az input egy olyan tömb, ami a felsorolt stringekre mutató mutatókat tartalmaz. input[m] const char* típusú, az m-edik string (karaktertömb) címét tartalmazza, az nc_open függvénynek pont ez kell, ahogy met4ever is írta.
Ha a tömböket a main-en belül deklarálod, akkor csak a main függvényben használhatod, a main-bõl hívott függvényekben sem! Ha minden függvényen kívül, akkor használhatod bárhol a forrásfile további részében.
#6860
Egy harmadik féle input/output megadás expliciten az egyes file-nevek max.hosszával (pl.100 karakter), de ide is bele kellene még csempészni a file-ok elérési útvonalát:

const char input[3][100] = {"mars20090216_0000+3.nc2",
"mars20100210_0000+24.nc2",
"mars20090216_0000+6.nc2" };
#6859
Ez az input és output definiálása, azonnali értékadással. Elvileg elégnek kellene lennie...
A fileneveknél a teljes elérési útvonalat meg kellene adni a file nevével együtt, hogy tényleg megtalálja, hogy mit kell megnyitni. Ezt a main-ben kell megadni, ha ott is használod fel az nc_open-ben.

Ezt találtam a neten az nc_open() függvényre:
int nc_open (const char *path, int omode, int *ncidp);

Ha ugyanezt hívod meg a programban, akkor az elsõ paraméternek egy const char-ra mutató pointernek kell lennie, az input[m] pont ilyen. A függvény paramétereként nem kell elé semmi, csak input[m].
A fv második paramétere egy int, gondolom az NC_NOWRITE az az.
A fv 3. paramétere pedig egy int-re mutató pointer. mivel gondolom az ncid csak egyszerû int-ként van definiálva, az elé oda kell tenni a függvényben való felhasználáskor a &-t, hogy a változó címére mutasson (mintha pointer lenne).
De az elsõ paraméternél nem kell semmi, mert az már eleve pointerként van definiálva.

Mielõtt a for cikluson belül az nc_open(input[m], NC_NOWRITE, &ncid)-ben felhasználod az input[m]-et, elõbb ki is irathatnád a képernyõre mondjuk így:

puts(input[m]);

hogy lásd, hogy jó-e az aktuális input[m] értéke, amit felhasználnál a fv-ben.
(file elérési útvpnal is legyen jól benne!)



Ha valamiért nem szereti a compilered az input/output elõbbi definiálását és értékadását, akkor így is kipróbálhatod:

const char* input[3]; //3 konstans stringet tartalmazó tömb létrehozása

input[0] = "mars20090216_0000+3.nc2"; //String értékadás egyenként
input[1] = "mars20100210_0000+24.nc2";
input[2] = "mars20090216_0000+6.nc2";

Természetesen ekkor is a teljes elérési úttal kellene a file-neveket megadni.
Vigyázni kell arra is, hogy az input ill. output indexe ne fusson túl jelen esetben 2-n, mert akkor azonnal segmentation fault lehet...
#6858
Ezt a részt ilyenné alakítottam, ahogy mondtad:

const char* input[] = {"mars20090216_0000+3.nc2",
"mars20100210_0000+24.nc2",
"mars20090216_0000+6.nc2" };

+ javítottam a ciklusokban az elírást.

Ezzel a *-gal én még hadilábon állok, nem tudom, hogy az input[] és output tömböket kell-e még definiálni, vagy ez elég:
const char* input[] = {"mars20090216_0000+3.nc2",
"mars20100210_0000+24.nc2",
"mars20090216_0000+6.nc2" };

Abban sem vagyok biztos, hogy ez utóbbit a main-en belül vagy kívül kell definiálni, ha belül hagyom, akkor Segmentation fault a vége, ha kívül, akkor no such file or directory hiba.

A for cikluson belül elég akkor így?
nc_open(input[m], NC_NOWRITE, &ncid)

nem kell se & se * az input elé?
#6857
Köszi, kipróbálom! nevet
#6855
Hogyan lehet megoldani C-ben, hogy a beolvasandó és a kimeneti fájlnevek változók legyenek, amelyeket egy tömbben adok meg?
Az egyszerûség kedvéért csak 3 adattal:
const char input[3] = { mars20090216_0000+3.nc2, mars20100210_0000+24.nc2,
mars20090216_0000+6.nc2 };

const char output[3] = {bspi20090127_0000+00300.nc, bspi20090127_0000+00600.nc, bspi20090127_0000+00900.nc };

Azt szeretném, hogy a következõ kódban a ciklus alapján elõször az elsõ fájlnévvel helyettesítse az input[m] elsõ értékét.

for(m=0; m kisebb 3; i++)
{

if ((retval = nc_open(input[m], NC_NOWRITE, &ncid)))
ERR(retval);

...
}

Azaz m=0 esetén az input[m] helyére mars20090216_0000+3.nc2 kerüljön.


Aztán kiíratásnál új fájlt hozok létre, amibe írok, ott pedig az elsõ lépésben az output tömb elsõ fájlnevét helyettesítse az uptput[n]-be.

for(n=0; n kisebb 3; i++)
{
if ((retval = nc_create(output[n], NC_CLOBBER, &ncid1)))
ERR(retval);


...
}

Tehát ezek csak részletei a programnak, de remélem érthetõ. nevet

Havazás előrejelzés

Utolsó észlelés

2024-11-24 20:56:28

Kõszeg

1.9 °C

RH: 82 | P: 1024.5

Észlelési napló

Térképek

Radar
map
Aktuális hõmérséklet
map
Aktuális szél
map

Utolsó kép

131548

Hírek, események

Indul a MetNet előrejelzési verseny sorozatának 41. sorozata

MetNet | 2024-11-02 11:38

pic
Kis pihenés után folytatódhat a meteorológiai megmérettetés, immáron 41.