AdminMod.de
https://www.adminmod.de/

Alte Datei in neue Datei
https://www.adminmod.de/viewtopic.php?t=8160
Seite 1 von 1

Autor:  Loi =Windelbub= [ 31.12.2003, 18:25 ]
Betreff des Beitrags:  Alte Datei in neue Datei

Hi Leute da ich des englischen nicht so mächtig bin und auch grad kein deutsches FAQ finde und sowieso ein Problem mit if for Schleifen habe mal ne Frage

wie kann ich Zeilen aus einer Datei löschen die in einer anderen vorkommen?

Son kleiner Ansatz dann schau ich mal weiter, thx und guten Rutsch

Autor:  Sir Drink a lot [ 31.12.2003, 18:43 ]
Betreff des Beitrags: 

Reden wir von Befehlen, die in einem anderen Plugin auch vorkommen?

Das einfachste ist, du suchst

1. die Funktion plugin_init().
2. plugin_registercmd("der Befehl",.....).
3. Du umschliesst dieses plugin_registercmd mit /* und */. Damit wird dieser auskommentiert.
4. Neu kompilieren und der Befehl ist weg.

Autor:  Loi =Windelbub= [ 31.12.2003, 18:52 ]
Betreff des Beitrags: 

habs wahrscheinlich ein wenig ungünstig ausgedrückt

ich will ein PLugin z.B. admin_change

dann soll dieser Befehl auslösen das eine Datei umgeschrieben wird

dabei soll halt etwas in der Datei stehen bleiben und nur die restlichen Zeilen gelöscht weden und anschließend noch was dazugeschrieben werden was in einer dritten Datei vorkommt

da es hier nicht um eine einfache Datei geht die per exec aufgerufen werden kann geht nur dieser Weg des bearbeitens


und mir fehlt es halt an einer for if Schleife die a die alten Zeilen löscht
und b die eine Datei in die andere überträgt

Autor:  [WING] Black Knight [ 31.12.2003, 19:47 ]
Betreff des Beitrags: 

readfile()
resetfile()
writefile()

Das sollten die Befehle sein.
Zunächst die gesuchten Zeilen mit readfile() aus den beiden Dateien in ein Array schreiben. Die erste Datei mit resetfile() neu erstellen und die Zeilen aus dem Array via writefile() in die alte/neue Datei schreiben.

Autor:  Sir Drink a lot [ 31.12.2003, 19:59 ]
Betreff des Beitrags: 

ui..also was ganz anderes :)

da brauche ich jetzt mal ein Beispiel der 2 Dateien.

eine schleife geht so:

new i;
new j=10;
for(i=0;i<=j;i++){
say("Hello World!");
}
Damit wird dann 10 mal Hello World im Chat geschrieben.

Vielleicht mal sowas als Beispiel:
Code:
public admin_change(HLCommand,HLData,HLUserName,UserIndex){
	new Data[MAX_DATA_LENGTH];
	new i;
	new j;
	new k;
	
	/*Die Einträge, die in Datei1.cfg immer bestehen bleiben sollen*/
	new staticlines=3;
	
	/*Die Zeile, aber der immer neue Daten eingetragen werden*/
	new startline=5;
	
	/*ein temporäres File erzeugen bzw. Inhalt löschen*/
	resetfile("tempDatei.cfg");
	
	/*die statischen Zeilen aus Datei1.cfg in das tempFile einfügen*/
	for(i=1;i<=staticlines;i++){
		readfile("Datei1.cfg",Data,i,MAX_DATA_LENGTH);
		writefile("tempDatei.cfg",Data,-1);
	}
	
	/*die Daten aus der Datei2.cfg in das tempFile ab startline einfügen*/
	j=filesize("Datei2.cfg");
	for (i=1;i<=j;i++){
		readfile("Datei2.cfg",Data,i,MAX_DATA_LENGTH);
		writefile("tempDatei.cfg",Data,startline);
		startline++;
	}
	
	/*Inhalt der Datei1.cfg löschen*/
	resetfile("Datei1.cfg");
	
	/*Inhalt aus dem tempFile zurück in Datei1.cfg schreiben*/
	k=filesize("tempDatei1.cfg");
	for(i=1;i<=k;i++){
		readfile("tempDatei1.cfg",Data,i,MAX_DATA_LENGTH);
		writefile("Datei1.cfg",Data,-1);
	}
	
	/*das temporäre File löschen*/
	deletefile("tempDatei.cfg");
		
	return PLUGIN_HANDLED;
}
*oh..Blacky war schneller :). Ich habe es ohne Array gemacht und mal fett mit Schleifgen rumhantiert. Eine Schleife ist z.B. unnötig :)*

Autor:  [WING] Black Knight [ 31.12.2003, 20:11 ]
Betreff des Beitrags: 

Hmmmm, guuute Idee.
Dadurch bleibt man deutlich flexibler, schließlich muss man statischen RAM nur für Data verwenden.

Autor:  Loi =Windelbub= [ 31.12.2003, 20:22 ]
Betreff des Beitrags: 

So vielen lieben Dank

habe mir jetzt trotz der bekannten Risiken einen Befehl geschaffen, damit meine metamod.ini komplett geändert wird.

da ist der Quelltext mit serverrestart (startet bei ngz selbstätig neu)

könnt ja noch Verbesserungen vorschlagen damit der Server nich doch abkachelt.

Wo ichs grad sehe, wozu setze ich eigendlich vaultdata? naja so ist es wenn man mit programmschnipseln arbeitet :) (nachtrag, das war um mit dem Befehl den Status überprüfen zu können)

für das ermitteln der filegröße wusst ich grad nix besseres als die Variante unten

Code:
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
#define ACCESS_SERVER_RESTART 1024
#define inhalt 200




new STRING_VERSION[MAX_DATA_LENGTH] = "2.50.0";
//new timer_say = 0;

new pluginwar[MAX_TEXT_LENGTH]="addons/metamod/pluginwar.cfg";
new pluginall[MAX_TEXT_LENGTH]="addons/metamod/pluginall.cfg";
new metamodini[MAX_TEXT_LENGTH]="addons/metamod/plugins.ini";
new zeile[inhalt][MAX_TEXT_LENGTH];
new iall;
new iwar;

public plugin_init()
{
        plugin_registerinfo("Metamod Plugins Load", "Change Plugins load", STRING_VERSION);
        plugin_registercmd("admin_loadall","admin_loadall",ACCESS_KICK,"admin_loadall: admin_loadall <0/1> Load all metamod plugins on/off");
        plugin_registercmd("admin_restartserver","admin_restartserver",ACCESS_SERVER_RESTART,"admin_restartserver: server restart in 20 seconds");
        return PLUGIN_CONTINUE;
}


public admin_restartserver(HLCommand,HLData,HLUserName,UserIndex) {
        new Command[MAX_COMMAND_LENGTH];
        new Data[MAX_DATA_LENGTH];
        new User[MAX_NAME_LENGTH];

        convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
        convert_string(HLData,Data,MAX_DATA_LENGTH);
        convert_string(HLUserName,User,MAX_NAME_LENGTH);

        log_command(User,Command,Data);
        say("Der Server wird in 20 Sekunden restartet");
        say("Der Server wird in 20 Sekunden restartet");
        say("........ Gleich startet ein War ........");
        say("........ Gleich startet ein War ........");
        say("Der Server wird in 20 Sekunden restartet");
        say("Der Server wird in 20 Sekunden restartet");
        say(". . . Umkonfigurierung des Servers . . .");
        say(". . . Umkonfigurierung des Servers . . .");
        say("Der Server wird in 20 Sekunden restartet");
        say("Der Server wird in 20 Sekunden restartet");

        set_timer("server_restart",20,0);
}

public server_restart(Timer,Repeat,HLUser){
        exec("quit");
        exec("exit");
        exec("quit");
}


public admin_loadall(HLCommand,HLData,HLUserName,UserIndex) {
        new Command[MAX_COMMAND_LENGTH];
        new Data[MAX_DATA_LENGTH];
        new User[MAX_NAME_LENGTH];
        new Text[MAX_TEXT_LENGTH];
        new i;
        new j;

        convert_string(HLCommand,Command,MAX_COMMAND_LENGTH);
        convert_string(HLData,Data,MAX_DATA_LENGTH);
        convert_string(HLUserName,User,MAX_NAME_LENGTH);

        log_command(User,Command,Data);
        if(streq(Data,"1") == 1) {
        if ( fileexists(pluginall) ) {
             j=realfilesize(pluginall);
             if(j>1) {
                    resetfile(metamodini);

                    if(j>99){
                         j=99;
                         }
                    for(i=1;i<=j;i++){
                         readfile(pluginall,zeile[i],i,MAX_TEXT_LENGTH);
                         writefile(metamodini,zeile[i],-1);
                         iall++;
                         }

                    snprintf(Text,MAX_TEXT_LENGTH,"[Metamod.ini] Es wurden %i Zeilen geschrieben",iall);
                    selfmessage(Text);
                    selfmessage("- Public settings -");
                    selfmessage("=====================");
                    selfmessage("Alle Metamod- und Adminmodplugins werden geladen.");
                    selfmessage("Damit der Server mit den neuen Einstellungen laeuft");
                    selfmessage("...");
                    selfmessage("admin_restartserver ausfuehren");
                    set_vaultdata("loadall","1");


                    }

             } else {
                    snprintf(Text, MAX_TEXT_LENGTH, "Warnung: %s wurde nicht gefunden oder ist leer. !!! Abbruch !!!",pluginall);
                    selfmessage(Text);
             }
        }
        else if(streq(Data,"0") == 1) {

             if ( fileexists(pluginwar) ) {
             j=realfilesize(pluginwar);
             if(j>1) {
                    resetfile(metamodini);

                    if(j>99){
                         j=99;
                         }
                    for(i=1;i<=j;i++){
                         readfile(pluginwar,zeile[i],i,MAX_TEXT_LENGTH);
                         writefile(metamodini,zeile[i],-1);
                         iwar++;
                         }

                    snprintf(Text,MAX_TEXT_LENGTH,"[Metamod.ini] Es wurden %i Zeilen geschrieben",iwar);
                    selfmessage(Text);
                    selfmessage("- War settings -");
                    selfmessage("=====================");
                    selfmessage("Es werden nicht alle Metamod- und Adminmod Plugins geladen.");
                    selfmessage("Damit der Server mit den neuen Einstellungen laeuft");
                    selfmessage("...");
                    selfmessage("admin_restartserver ausfuehren");
                    set_vaultdata("loadall","0");


                    }

             } else {
                    snprintf(Text, MAX_TEXT_LENGTH, "Warnung: %s wurde nicht gefunden oder ist leer. !!! Abbruch !!!",pluginwar);
                    selfmessage(Text);
             }
        } else {

        new loadwert[MAX_DATA_LENGTH];
        get_vaultdata("loadall",loadwert,MAX_DATA_LENGTH);
        snprintf(Text, MAX_TEXT_LENGTH, "admin_loadall need 0 off / or 1 on  ---  set is %s",loadwert);
        selfmessage(Text);
        }
        return PLUGIN_HANDLED;
}

realfilesize(fname[]){
        new sizeoffile;
        new sizeoffile2;
        new i;
        new string[MAX_DATA_LENGTH];

        sizeoffile=filesize(fname,1);
        sizeoffile2=sizeoffile;
        for(i=1; i<=sizeoffile2; i++) {
                readfile(fname,string,i,MAX_DATA_LENGTH);
                if(strlen(string)>98){
                        sizeoffile-=1;
                }
                if(sizeoffile==i){
                        break;
                }
        }
        return sizeoffile;
}

Autor:  Sir Drink a lot [ 31.12.2003, 20:34 ]
Betreff des Beitrags: 

oh oh..

ich sage mal so:
Wenn dabei was in die Hose geht, dann ordentlich :)
Aber mutig. :)

Übrigens heist es nicht mehr metamod.ini sondern plugins.ini bei metamod! realfilesize() ist nicht mehr nötig.

Autor:  Loi =Windelbub= [ 31.12.2003, 20:38 ]
Betreff des Beitrags: 

hast Recht :D aber wenn was in die Hose geht muß eh einer mit ftp Rechten ran, und so halt nich immer

und AMX bekomm ich sonst nich komplett raus und wieder rein

heißt wirklich plugins.ini :roll:

und den Rest mach ich im neuen Jahr, nu gehen wir erstmal die Welt erleuchten ^^

Autor:  Sir Drink a lot [ 31.12.2003, 21:25 ]
Betreff des Beitrags: 

me2 :)

ich befürchte nur, dass ich wieder nachher der bin, der am meisten leuchtet :lol:

Autor:  [WING] Black Knight [ 01.01.2004, 06:42 ]
Betreff des Beitrags: 

Code:
realfilesize(fname[])
Das ist soweit ich mich erinnere eine alte Funktion (Workaround) von mir, die inzwischen überholt ist, da der Bug gefixt wurde.

Hättest Du gesagt, was Du vorhast, hätte ich Dir eine deutlich einfachere Methode gegeben. Seit Metamod 1.17 kann man eine addons/metamod/config.ini definieren.
Willst Du die Standardeinstellungen fahren, löscht Du diese Datei. Willst Du andere Einstellungen fahren, schreibst Du z.B.
Code:
plugins_file addons/metamod/plugins2.ini
Ergo, brauchst Du nur eine zweite plugins.ini mit dem Namen plugins2.ini zu generieren.

Autor:  Loi =Windelbub= [ 01.01.2004, 16:18 ]
Betreff des Beitrags: 

ah das wußt ich noch nicht, zumal ich noch nicht die 1.7 erst seit gestern mit drauf hab.

aber selbst wenn ich die plugins2.ini ändere/erstelle bleibt ja das ursprüngliche Problem bestehen, dass ich ja dennoch den Inhalt einer Datei Zeilenweise in eine andere übertragen muss, nur das ich jetzt wesentlich mehr Sicherheit habe, da die plugins.ini in ihrer alten Form bestehen bleiben kann.
Zitat:
schreibst Du z.B.
Code:
plugins_file addons/metamod/plugins2.ini
und wo soll diese Zeile auftauchen in der server.cfg oder in der plugin.ini da werd ich nich so ganz schlau draus, ich glaub in den Startparametern und da komm ich ja nich ran

Das mit den realfilezize kann gut sein, das hatte ich aus nem plugin wo ich wonids von Spielern in eine verwarnungsliste tun konnte soweit ich weiß. blos da bei meinem adminmod kaum noch eine Datei original ist weiß ich das halt nich so genau, ich sag mal es ist Deins *g*



danke

Autor:  [WING] Black Knight [ 01.01.2004, 16:47 ]
Betreff des Beitrags: 

Nö, das kann auch aus einem Plugin von Sir Drink a lot stammen. Es ging mir auch nicht primär darum, Dich darauf hinzuweisen, dass ich den Code geschrieben habe, sondern, dass er inzwischen überflüssig geworden ist und vermutlich dann mehr Ärger produziert, als dass er hilft. Es hat hier keiner etwas dagegen, den Code anderer zu nehmen.

Zurück zu Deinem Problem.
Es ist ganz einfach. Für den Fall, dass Du die plugins2.ini verwenden willst, machst Du:
Code:
writefile("addons/metamod/config.ini","plugins_file addons/metamod/plugins2.ini",1);
Für den Fall, dass Du die plugins.ini verwenden möchtest, schreibst Du:
Code:
deletefile("addons/metamod/config.ini");
Fertig! Kein Kopieren notwendig!

Autor:  Loi =Windelbub= [ 01.01.2004, 18:09 ]
Betreff des Beitrags: 

hey supi das macht das ganze wesentlich sicherer und auch das plugin kleiner und stabiler, super, wußte halt nicht was die neue metamod kann

so noch nen bissl testen ob ich dann auch wirklich nen neustart brauc, aber ich fürchte da komm ich nicht drum herum

Autor:  [WING] Black Knight [ 01.01.2004, 18:44 ]
Betreff des Beitrags: 

Um den Neustart kommst Du nicht herum. Die config.ini ist nur ein Ersatz für die +localinfo Option. Wird also nur beim Serverstart gelesen.

Seite 1 von 1 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/