Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Pominięcie linii gdy pierwszy znak to spacja lub znak nowej linii


Najlepsza odpowiedź GwynBleidD, 11.08.2014 10:13

A świstak wyżej siedzi i tylko psuje kod...

Po 1. string w pawnie to nic innego, jak tablica liczb, tylko te liczby odpowiadają konkretnym znakom w kodzie ASCII, więc nie ma żadnej przeszkody, by POJEDYNCZY znak porównywać poprzez ==, nawet jest to zalecane, bo wydajniej się już nie da. A porównywanie pojedynczych znaków poprzez equal nie zadziała wcale... Bo się tak nie da i tyle.
Po 2. Jeśli string składa się tylko ze znaku null (czyli ^0) to jest po prostu pusty, więc 2 i 3 warunek w Twoim kodzie robią DOKŁADNIE to samo!
Po 3. po co 2 sprawdzenia, po co sprawdzasz 2 znak? Co Cię on obchodzi, jeśli 1 był nullem, więc string się tu skończył?

Wracam do kodu z postu autora tematu.

1 i 3 warunek sprawdzą DOKŁADNIE to samo. 2 i 4 również sprawdzą DOKŁADNIE to samo, bo '^0' to nic innego, jak 0...
 

if(!output[0] || output[0] == '^n' || output[0] == '^r' || output[0] == '^t' || output[0] == ' ')  continue;
Kod zadziała w 100%, złapie zarówno spację, znak nowej linii (czyli de facto pustą linię), pustą linię bez znaku nowej linii (w zależności od tego, jak rozdzielasz tekst na linie, może ten znak tam być, a może go nie być) oraz złapie tabulator (jeśli nie chcesz go łapać, droga wolna by to zmienić). Przejdź do postu


  • Zamknięty Temat jest zamknięty
6 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 10.08.2014 14:01

Witam.

Jak zrobić pominięcie linii gdy pierwszy znak to spacja lub znak nowej linii

 

Wypociny moje xD:

if(isspace(output[0]) || output[0] == '^0' || output[0] == ' ' || !output[0])  continue;

które z nicj jest dobre ? A może jakieś inne rozwiązanie?


  • +
  • -
  • 0

#2 Nltj

    Zaawansowany

  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:107
  • Lokalizacja:Jamajka ?
Offline

Napisano 11.08.2014 00:58

(Rozumiem że "0 to 1-szy" znak ?)

 

Pierwsza jest dobrze, bo sprawdza czy znak jest spacją. ale reszta niezbyt. == służy do porównywania przeważnie "cyfr" lub gotowych stringow ale po co formatowac na jedno sprawdzanie :D ? Po co trzecia jak pierwsza to dokładnie to samo ? do tej trzeciej nie może być użyte == ale equal(output[0], " ") znak czyli spacja w Twoim przypadku lub equal(output[0], "^0") sprawdza czy pierwszy znak nie jest ^0, zakładając że gra odczytuje to jako jeden znak...(do tego ^0, nie wiem co to, ale pewnie ENTER ^^) ostatnie equal(output[0], "") będzie dobrze. sprawdza czy znak pierwszy nie istnieje (pomija (continue) jeżeli nie istnieje)

 

funkcja wg mnie (mogę się mylić :3)

if(isspace(output[0]) || equal(output[0], "^0") || equal(output[0], "")) continue;
// Czy Spacja.............Czy znak nowej linii.......czy znak istnieje
// Drugie sprawdzanie zakładając że ^0 to pojedynczy znak w mechanice, jeżeli jednak DWA...
if(isspace(output[0]) || equal(output[1], "^0") || equal(output[0], "")) continue;

Myślę że mój post coś ci pomoże :333


Użytkownik Nltj edytował ten post 11.08.2014 01:05

  • +
  • -
  • 0

#3 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 11.08.2014 10:13   Najlepsza odpowiedź

A świstak wyżej siedzi i tylko psuje kod...

Po 1. string w pawnie to nic innego, jak tablica liczb, tylko te liczby odpowiadają konkretnym znakom w kodzie ASCII, więc nie ma żadnej przeszkody, by POJEDYNCZY znak porównywać poprzez ==, nawet jest to zalecane, bo wydajniej się już nie da. A porównywanie pojedynczych znaków poprzez equal nie zadziała wcale... Bo się tak nie da i tyle.
Po 2. Jeśli string składa się tylko ze znaku null (czyli ^0) to jest po prostu pusty, więc 2 i 3 warunek w Twoim kodzie robią DOKŁADNIE to samo!
Po 3. po co 2 sprawdzenia, po co sprawdzasz 2 znak? Co Cię on obchodzi, jeśli 1 był nullem, więc string się tu skończył?

Wracam do kodu z postu autora tematu.

1 i 3 warunek sprawdzą DOKŁADNIE to samo. 2 i 4 również sprawdzą DOKŁADNIE to samo, bo '^0' to nic innego, jak 0...
 
if(!output[0] || output[0] == '^n' || output[0] == '^r' || output[0] == '^t' || output[0] == ' ')  continue;
Kod zadziała w 100%, złapie zarówno spację, znak nowej linii (czyli de facto pustą linię), pustą linię bez znaku nowej linii (w zależności od tego, jak rozdzielasz tekst na linie, może ten znak tam być, a może go nie być) oraz złapie tabulator (jeśli nie chcesz go łapać, droga wolna by to zmienić).
  • +
  • -
  • 2

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#4 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 11.08.2014 10:40

A porównywanie pojedynczych znaków poprzez equal nie zadziała wcale... Bo się tak nie da i tyle.

Wszystko fajnie, ale tutaj akurat da się to zrobić ;]
if(equal(tekst[2], "w", 1))
i porówna jeden znak, oczywiście dużo lepiej jest robić tak jak wspomniałeś.
  • +
  • -
  • 2

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 11.08.2014 10:45

Super.
Czy dobrze zrozumiałem.
Warunek nr:
1. Sprawdza czy linia jest pusta
2. Sprawdza czy jest znak nowej linii
3. Sprawdza czy... Co ro ^r ? Pusta linia bez znaku nowej linii?
4. Sprawdza czy tabulator
5. Sprawdza czy spacja
  • +
  • -
  • 0

#6 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 11.08.2014 22:58

A porównywanie pojedynczych znaków poprzez equal nie zadziała wcale... Bo się tak nie da i tyle.

Wszystko fajnie, ale tutaj akurat da się to zrobić ;]
if(equal(tekst[2], "w", 1))
i porówna jeden znak, oczywiście dużo lepiej jest robić tak jak wspomniałeś.

No niby tak, ale to jakaś okropność jest...

3. Sprawdza czy... Co ro ^r ? Pusta linia bez znaku nowej linii?

Są 3 różne możliwości zakończenia linii: Windowsowy, MacOSowy i Uniksowy. Linux używa pojedynczego znaku ^n, windows 2ch znaków: ^r^n (czyli koniec linii następuje, gdy znajdziemy OBA te znaki w podanej kolejności), MacOS używa znaku ^r. I nie, nie chodzi tu o to pod jakim systemem uruchamiasz serwer, tylko pod jakim system był edytowany plik, który odczytujesz :)
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#7 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 12.08.2014 00:17


Wszystko fajnie, ale tutaj akurat da się to zrobić ;]

if(equal(tekst[2], "w", 1))

i porówna jeden znak, oczywiście dużo lepiej jest robić tak jak wspomniałeś.

 

albo

equal(tekst," ",1)

 

 


sebul (12.08.2014 01:45):
Toć przecież podałem tylko przykład (że się da), a to Twoje, to jeszcze tak samo jakby napisać
equal(tekst[0]," ",1)

  • +
  • -
  • 1
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych