Jeg administrer to CS servere på samme maskine og har i den forbindelse brug for at opdatere listerne med bannede WONIDs mellem de to servere. Altså sådan så de to lister kan synkroniceres en gang i døgnet.
Hvis jeg bare kopiere den ene over i den anden, så bliver den jo overskrevet og jeg kan ikke regne ud hvordan jeg bare kopiere indholdet fra den ene til den anden fil, sådan så eksisterende observationer beholdes/overskrives, mens nye tilføjes.
Min idé er at først at kopiere den første over i den anden, og derefter den anden over i den første.
Klogt svar, da det jo vil være den anden mulighed. Og det er faktisk en løsning som loader de bannede IDs ind i programmet. Så jeg sætter bare begge servere til at loade de bannede IDs fra sin egen liste og fra den anden servers liste. Så langt så godt. Problemet er nu at hvis man vha HLSWen (et spilserverovervågningsprogram) vil se listen over bannede IDs, så viser den kun den pågældende servers og ikke dem den har loadet fra den anden server. Og det er ikke helt optimalt, men jeg er tæt på at nå den optimale løsning :-)
Tæt på! Det virker næsten. Men hvis der er flere obs i b end i a og man skriver copy a +b b, så sletter den de obs som er i b, men ikke i a. Og hvis man skriver copy a +b a , så kopierer den fint det hele ind i a, men lader evtuelle ens obs stå, så de er der dobbelt. (hvis obs findes både i a og i b). Den overskriver altså ikke allerede eksisterende observationer.
Nej, det er jo ikke en intelligent merging ! Det er bare en kopier med append. Der findes sikkert nogle standard værktøjer der kan gøre det du vil ellers må du programmere et.
Man kan måske lave et lille batch script til at gøre det. For at svare på om man kan er jeg nød til at vide hvilken OS det skal kører på, og hvordan de to filer ser ud.
Det er det sidste tal som er wonid'et, og det som serveren banner efter og som er det som gerne skulle kunne synkroniseres mellem de to servere. Half-Life (spillet) kan dog ikke indlæse IDerne hvis den ikke først får at vide at det er et ID, og i hvorlang tid den skal holde på det, derfor først 'banid' og '0.0' . Du kan se et eksempel på filen her http://ruben.tumpe.dk/banned.txt
Jeg er meget glad for din indsats (mest hvis den fører til noget :-)
Følgende skulle kunne bruges. Du putter det i en fil med .cmd (eller .bat) som extension, du kalder derefter batch-filen, med de to input filer som de to første argumenter, og output filen som det sidste argument. Som med det meste software jeg laver vil jeg tilråde at du prøver det på nogle test filer først.
@echo off rem Check if the user has applied some correct arguments if [%1]==[] call :usage %0 & goto :eof if [%2]==[] call :usage %0 & goto :eof if [%3]==[] call :usage %0 & goto :eof if not exist %1 echo The file %1 does not exist& call :usage %0 & goto :eof if not exist %2 echo the file %2 does not exist& call :usage %0 & goto :eof if exist %3 del %3
setlocal set in1=%1 set in2=%2 set out=%3
rem Run thru each line in in1, if the id is not found in in2 the line is written to out for /F "delims=;" %%i in (%in1%) do call :merge "%%i"
rem Append in2 to the end of out for /F "delims=;" %%i in (%in2%) do echo %%i >>%out% rem We are done endlocal goto :eof
:merge rem Extract the ID from the line for /F "tokens=3" %%i in ("%~1") do set id1=%%i rem Read each line in in2 set match=0 for /F "delims=;" %%i in (%in2%) do call :check "%%i" rem Write the line from in1 to out if no match has been found if [%match%]==[0] echo %~1 >>%out% goto :eof
:check rem Extract the ID from the line for /F "tokens=3" %%i in ("%~1") do set id2=%%i rem Is the ID's the same ? if [%id1%]==[%id2%] set match=1 goto :eof
>>bertel *gg* Som med det meste software jeg laver vil jeg tilråde at du prøver det på nogle test filer først.
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.