Kezdőoldal » Számítástechnika » Programozás » Batch fájl olvasás probléma?

Batch fájl olvasás probléma?

Figyelt kérdés

a feladat az lenne, hogy egy text dokumentum adatát kéne összehasonlítani egy változóval. Nekem nem működik, tudnátok segíteni?

kód:


for /f "tokens=*" %%A in (date.txt) do (echo %%A)


if %DATE%==%%A (goto input) else goto a


:a

...

:input


Igazából a fájl beolvasás működik, az iffel van a probléma.



2018. szept. 29. 20:29
1 2
 1/11 coopper ***** válasza:

Szia.


A következőek a gondok a fenti "programmal" :


1. A for ciklusban csak egy utasitás hajtódik végre (echo %%A), szerintem ide be kellene rakni az if-et.


2. Ha a fent leirt IF-et berakod a for ciklusba akkor annak valamelyik ága mindenképp végre fog hajtódni (vagy az igaz ága, (ha a fájlból kiolvasott utolsó dátum - jelenlegi alapot szerint) egyenlő az aktuális dátummal, vagy a hamis ága ha nem egyenlőek).


Szerintem valahogy igy :


for /f "tokens=*" %%A in (date.txt) do (

_ _echo %%A

_ _if %DATE%==%%A (goto input)

)

goto a

:input

...

...

goto _end

:a

...

...

...

:_end


Sok sikert. Üdv.

2018. szept. 30. 15:49
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:

Szia.

Köszönöm a választ, de sajnos még mindig nem működik.



for /f "tokens=*" %%A in (date.txt) do (

echo %%A

if %DATE%==%%A (goto input)

goto a

)


mindig ugrik az a-ra.


de hogyha a kettőt kicserélem,


for /f "tokens=*" %%A in (date.txt) do (

echo %%A

if %DATE%==%%A (goto a)

goto input

)


akkor pedig mindig az inputra ugrik.

Előre is köszönöm a segítséget!

2018. okt. 1. 18:34
 3/11 coopper ***** válasza:

Szia.


Mit szeretnél tulajdonképpen ?


Mivel ahogyan a leirásod szól, az van van leprogramozva, vagy forditva, a leprogramozott utasitásokról jó leirást adtál.


Ez a programod :


for /f "tokens=*" %%A in (date.txt) do (

echo %%A

if %DATE%==%%A (goto input)

goto a

)


A fenti esetben akkor ugrik az "input" cimkére, ha az aktuális dátum egyenlő a a fájl első sorából kiolvasott adattal (dátum) : if %DATE%==%%A (goto input)


Minden más esetben (és ez nincs feltételhez kötve) pediglen rögtön kilép a ciklusból : goto a


Tehát először fogalmazd meg a feltételeket, mit mikor kell csinálni (gondolok itt az "input"-ra illetve az "a"-ra), minden egyes beolvasott dátumnál kell-e végrehajtani valamelyiket ("a" vagy "input"), vagy csak akkor ha egyezés van. Illetve még azt kell eldönteni, hogy az "a" vagy az "input" egyszer vagy többször lesz végrehajtva, mivel annak megfelelően kell szervezni a batch fájlt.


Sok sikert. Üdv.

2018. okt. 1. 19:38
Hasznos számodra ez a válasz?
 4/11 A kérdező kommentje:
A lényeg az lenne, hogy naponta csak egyszer fusson le az a, mindig máskor, amikor a porgram elindul, az inputra ugrik.az a-nál mindig beírja a napi dátumot a date.txt-be, és így minden nap egyszer fut le. de be kéne olvasni a date.txt- adatát, hogy az operálni tudjak vele.
2018. okt. 3. 19:11
 5/11 coopper ***** válasza:

Szia.


Akkor szerintem a következő a módszer :


A ciklusban megnézed, hogy van-e mai dátum, ha van ekkor egy változó értékét beállitod modjuk 1-re,


Cikluson kivűl IF-el teszteled a változót, ha 1 akkor "a", egyéb esetben "input".


Valahogy igy :

set /a valasz=0

for /f "tokens=*" %%A in (date.txt) do (

_ _echo %%A

_ _if %DATE%==%%A (set /a valasz=1)

)


if %valasz% equ 1 (goto a)


:input

...

...

goto _end


: a

...

...

:_end



Sok sikert. Üdv.

2018. okt. 3. 19:29
Hasznos számodra ez a válasz?
 6/11 A kérdező kommentje:
Még így is 0-át fog kiadni, minden esetben. ):
2018. okt. 8. 19:09
 7/11 coopper ***** válasza:

Szia.


Miért is ? Légyszives indokold meg, miért add mindig nullát.


Kipróbáltad ? Mert én igen, és nekem jól müködott, csak akkor adott nullát, ha nem volt a fájlban a mai nappal egyező dátum.


Üdv.

2018. okt. 9. 13:58
Hasznos számodra ez a válasz?
 8/11 A kérdező kommentje:

Szia.

Én kipróbáltam új fájlban, másik környezetben, de nekem ott se működött. Lehet, hogy a txt-vel van a probléma? hogy még egy felesleges adatot is utána ír, ami miatt nem működik?

2018. okt. 10. 18:14
 9/11 A kérdező kommentje:
igen, valószínűleg nálam tényleg ez a probléma. egy karaktert ír utána, amit egy spaceként jelenít meg pl a notepad. ezt valahogy le kéne törölnöm a végéről. ezt hogy lehetne megoldani programon keresztül?
2018. okt. 10. 18:25
 10/11 coopper ***** válasza:

Szia.


Valahogyan biztos ki lehet szűrni azt is, de azt hogy hogyan én nem tudom, szerintem egyszerűbb a másik megoldás, ha a dátumhoz is hozzáadod azt a plusz karaktert és igy viszgáltatod a feltételt, (de előtte biztosnak kell lenned benne, hogy az a plusz karakter biztosan szóköz - mert egyéb esetben megint "mindig nullát fog visszadni"), valahogy igy (idézőjelek közzé kell tenni a feltételeket és beirni az idézőjelekhez a plusz karaktert) :


if "%DATE% "=="%%A" (set /a valasz=1)


A fenti sor az aktuális dátum+egy szóköz egyezését vizsgálja a fájlból kiolvasott dátummal (és ennek a fájlból kiolvasott dátumnak a végén is van egy plusz szóköz).


Kipróbáltam, nálam működik.


Sok sikert. Üdv.

2018. okt. 10. 19:40
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!