←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Odczyt z pliku z "argumentami"

Zablokowany

  • +
  • -
dram - zdjęcie dram 05.04.2011

Witam. Mam pytanie dotyczące czytania pliku...

Mianowicie. Lecę po pliku config.ini i sprawdzam kolejno linijki wyszukując odpowiednich komend.

1 linjka w pliku niech będzie :

nazwa_serwera "AMXX.PL","amxx.PL"
druga:
liczby 1,2,3,4,5,6,7,8,9,10,11

Chcę was prosić o kod który szuka określonych fraz które są początkiem lini(w naszym wypadku nazwa_serwera/liczby) i pobiera z nich argumenty a następnie zapisuje do tablicy: new ARGS[100](max argumentow 100)

Czyli w przypadku komendy :"liczby"
ARGS[0] = 1
ARGS[1] = 2
ARGS[2] = 3
....
w Przypadku komendy "nazwa_serwera"
ARGS[0] = "AMXX.PL"
ARGS[1] = "amxx.PL"

DZIĘKUJE. POZDRAWIAM.
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 05.04.2011

Musisz zrobić własny parser, bierzesz najpierw za pomocą parse odczielasz : nazwa_serwera od reszty potem w reszcie muszisz znaleść początkowy " i końcowy " funkcją strfind wartość z pomiędzy "" wrzucasz do tablicy, potem robisz to samo. co do liczb to najpierw pobierasz wartość od początku stringa do , a potem kolejno od pierwszego , do końcowego , i na samym koncu od ostatniego , do końca stringa. Proste nie ? :P
Odpowiedz

  • +
  • -
dram - zdjęcie dram 05.04.2011

^^ no nie ;(

TZN chciałbym żeby wszystko oddzielało przecinkami.. Czyli że to co jest między przecinkami wrzucało do tabeli.
A w przypadku gdy nie ma przecinków wrzuca to co tam jest.
Użytkownik dram edytował ten post 05.04.2011 17:32
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 05.04.2011

Tak czy inaczej musisz pisać własnego parsera a to jak on będzie działał zależy tylko od tego jak go "wykodzisz" xP
Odpowiedz

  • +
  • -
dram - zdjęcie dram 05.04.2011

No ale jak pobrać ilość ","

Jak pobrać w których miejscach się one znajdują?
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 05.04.2011


new iIlosc = 0, iPozycje[10] = {0}, szString[256], temp = -1;
while(1)
{
temp = strfind(szString, "^",^"", _, temp + 1);
if(temp == -1) break;
iPozycje[iIlosc] = temp;
iIlosc ++;
}

Może zadziała xP
Odpowiedz

  • +
  • -
dram - zdjęcie dram 05.04.2011

Mhm no raczej nie...
A jak podzielić to wszystko PARSEM, tak aby była możliwość taka że jest zmienna liczba argumentów ?:)
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 05.04.2011

Czemu twierdzisz że nie ? Sprawdziłeś chociaż ?
Co do parsa to Pętla i dzielenie drugiej części na 2 części i tak w kółko do puki druga część nie będzie pusta.
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 05.04.2011

jesli chodzi ci o odczyt cos na wzor cvarow to mozesz zrobic
tablice np tab[100][33]

i tak :
1 parse
2 sprawdzasz czy liczba
a)liczba to wpisujesz tab[licznik]=liczba_zmienona_na_znak+"#$#";
b)string wpisujesz tab[licznik]=string;
3 koniec pliku?
a) nie - punkt 1
b) tak - koniec petli

i potem tylko funkcje sprawdzajaca czy w stringu znajduje sie ciag #$# jesli tak to wpisana jest liczba jesli nie to wpisany jest string :D
Odpowiedz

  • +
  • -
dram - zdjęcie dram 06.04.2011

Hmm a jeszcze jak sprawdzić długość wszystkich liter w tablicy..

Powiedzmy mam cos takiego new szSTRING[40] = "Ala Ma Kota"

I zwraca mi 11.. Pozdrawiam.
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 06.04.2011

sizeof(szSTRING);
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 06.04.2011

sizeof zwróci 40 :P
strlen("Ala Ma Kota") = 11
Odpowiedz

  • +
  • -
dram - zdjęcie dram 06.04.2011

No dobra a jak usunąć z danego tekstu pierwsze 11 znaków?

Bądź np zacząć zapisywać tekst od 12 znaka do końca.
Użytkownik dram edytował ten post 09.04.2011 23:14
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 10.04.2011

new szString[] = "Ala ma kota, a kot ma Ale.", szEnd[32];

add(szEnd, sizeof(szEnd) - 1, szString, 11);
//szEnd == "Ala ma kota";

format(szEnd, sizeof(szEnd) - 1, "%s", szString[11]);
//szEnd == ", a kot ma Ale.";

Pisane na szybko w notatniku :P
Odpowiedz

  • +
  • -
dram - zdjęcie dram 10.04.2011

Okej a ostatnia rzecz:) (mam nadzieje)

Jak policzyć w danym stringu ilość danego znaku?:D

Np. "Ala ma kota" liczymy a

zwraca 4
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 10.04.2011


/*
* szString - String Przeszukiwany
* szSearchStr - String Szukany
* IgnoreCace - Jesli 1 wielkosc liter nie bedzie brana pod uwage
*
* Zwraca : Ilosc wystapien szukanego stringu w stringu przeszukiwanym
*/
stock counter_string(szString[], szSearchStr[], IgnoreCase = 0)
{
new iIlosc = 0;
for(new i = 0; i += 1 < strlen(szString); )
{
if((i = ((IgnoreCase == 1) ? containi(szString[i], szSearchStr) : contain(szString[i], szSearchStr))) != -1)
iIlosc ++;
else
break;
}
return iIlosc;
}
Odpowiedz

  • +
  • -
dram - zdjęcie dram 10.04.2011

a w tej pętli(for) na końcu nie powinno być czasem i++?
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 10.04.2011

Nie
Odpowiedz
Zablokowany