Jaką składnią posługiwać się przy wpisywaniu wzorca?

Wyrażenia regularne wpisuje się w formie separator{wyrażenie}separator, np. /^([a-z]*)$/i lub @^(?:http://)?([^/]+)@i. Stosować można wszelkie formy zgodne z funkcjami sprawdzającymi poprawność wyrażeń regularnych w PHP (przykład).

Dlaczego wyrażenie regularne powinno być wpisywane z separatorami?

Dzieje się tak dlatego, że wpisywanie wzorca z uwzględnieniem separatorów pozwala na dodanie modyfikatorów do niego. W wypadku ich braku skrypt domyślnie doda / na początku wyrażenia i / na jego końcu.

Czy mogę dodawać jakąkolwiek treść do testera?

Generalnie to użytkownik wyznacza jaką treść i pod jakim kątem chce testować. Musi on jednak posiadać pełne prawa do publikacji testowanej treści, gdyż będzie ona dostępna dla innych internautów. Należy także unikać wpisywania zwrotów obscenicznych, wulgarnych, czy wskazujących zasoby niezgodne z polskim prawem. Użytkownik ponosi pełną odpowiedzialność za treści publikowane przez niego w serwisie. Na uzasadnioną prośbę osób trzecich poszczególne wpisy mogą zostać usunięte z serwisu.

Czym są wyrażenia regularne?

Wyrażeniami regularnymi nazywami wzorce opisujące ciąg znaków.

  1. wikipedia.org - definicja wyrażeń regularnych
  2. regular-expressions.info - kompendium wiedzy
  3. php.net - użycie w PHP

Gdzie można znaleźć przykładowe wzorce?

W sieci znajduje się całe morze przykładowych wyrażeń. Warto zainteresować się przykładowo:

  1. 15 przydatnych wyrażeń regularnych w PHP
  2. regexlib.com - biblioteka wzorców

Znalazłem błąd w serwisie. Gdzie mogę go zgłosić?

Zauważone błędy proszę zgłaszać w komentarzach pod tym artykułem.

Jestem użytkownikiem forum. Czy mogę jakoś pokazać wyniki testu wyrażenia?

Tak. Przy każdym sprawdzonym wzorcu, w kolumnie identyfikatora, znajduje się odnośnik do strony testowanego wyrażenia. Wystarczy skopiować odnośnik i podzielić się nim ze znajomymi.

W jaki sposób mogę pomóc w rozwoju serwisu?

Osoby chętne do pomocy mogą jej udzielić w następujący sposób:

  1. Poprzez dobrowoloną dotację PayPal.
  2. Poprzez wykonanie tłumaczenia serwisu. Aktualnie poszukiwane są tłumaczenia na języki: niemiecki, hiszpański, francuski, włoski i rosyjski. Jeżeli jesteś zainteresowany zapraszam do korespondencji.
  3. Poprzez dodanie serwisu do ulubionych na serwisach społecznościowych.

Polityka używania cookies i podobnych technologii.

Cookies wykorzystywane są na następujących zasadach:

  1. W związku z udostępnianiem funkcji testowania wyrażeń regularnych i personalizacją regexp.pl (w dalszej części zwanego „Serwisem”) stosuje cookies (tzw. ciasteczka), tj. informacje zapisywane przez serwery na urządzeniu końcowym użytkownika. Serwery mogą odczytać informacje przy każdorazowym połączeniu się z tego urządzenia końcowego lub używać innych technologii o funkcjach tożsamych z ciasteczkami. W niniejszym dokumencie, informacje dotyczące cookies mają zastosowanie również do innych podobnych technologii stosowanych w ramach Serwisu. Pliki cookies stanowią dane informatyczne, w szczególności pliki tekstowe, które przechowywane są w urządzeniu końcowym użytkownika serwisu internetowego. Cookies zazwyczaj zawierają nazwę domeny serwisu internetowego, z którego pochodzą, czas przechowywania ich na urządzeniu końcowym oraz unikalny numer.
  2. Pliki cookies wykorzystywane są w celu:
    • dostosowania zawartości Serwisu do preferencji użytkownika oraz optymalizacji korzystania z niej; w szczególności pliki te pozwalają rozpoznać urządzenie użytkownika serwisu internetowego i odpowiednio wyświetlić stronę internetową, dostosowaną do jego indywidualnych potrzeb,
    • tworzenia statystyk, które pomagają zrozumieć, w jaki sposób użytkownicy serwisu korzystają ze stron internetowych, co umożliwia ulepszanie ich struktury i zawartości,
    • utrzymania sesji użytkownika serwisu internetowego (po zalogowaniu), dzięki której użytkownik nie musi na każdej podstronie serwisu ponownie wpisywać loginu i hasła,
    • dostarczania użytkownikom treści reklamowych bardziej dostosowanych do ich zainteresowań.
  3. W ramach naszych serwisów internetowych możemy stosować następujące rodzaje plików cookies:
    • „niezbędne” pliki cookies, umożliwiające korzystanie z usług dostępnych w ramach serwisu internetowego, np. uwierzytelniające pliki cookies wykorzystywane do usług wymagających uwierzytelniania w ramach Serwisu,
    • pliki cookies służące do zapewnienia bezpieczeństwa, np. wykorzystywane do wykrywania nadużyć w zakresie uwierzytelniania w ramach serwisu,
    • pliki cookies, umożliwiające zbieranie informacji o sposobie korzystania ze stron internetowych serwisu,
    • „funkcjonalne” pliki cookies, umożliwiające „zapamiętanie” wybranych przez użytkownika ustawień i personalizację interfejsu użytkownika, np. w zakresie wybranego języka lub regionu, z którego pochodzi użytkownik, rozmiaru czcionki, wyglądu strony internetowej itp.,
    • „reklamowe” pliki cookies, umożliwiające dostarczanie użytkownikom treści reklamowych bardziej dostosowanych do ich zainteresowań.
  4. W wielu przypadkach oprogramowanie służące do przeglądania stron internetowych (przeglądarka internetowa) domyślnie dopuszcza przechowywanie plików cookies w urządzeniu końcowym użytkownika. Użytkownicy serwisu mogą dokonać w każdym czasie zmiany ustawień dotyczących plików cookies. Ustawienia te mogą zostać zmienione w szczególności w taki sposób, aby blokować automatyczną obsługę plików cookies w ustawieniach przeglądarki internetowej bądź informować o ich każdorazowym zamieszczeniu w urządzeniu użytkownika serwisu internetowego. Szczegółowe informacje o możliwości i sposobach obsługi plików cookies dostępne są w ustawieniach oprogramowania (przeglądarki internetowej). Niedokonanie zmiany ustawień w zakresie cookies oznacza, że będą one zamieszczone w urządzeniu końcowym użytkownika, a tym samym będziemy przechowywać informacje w urządzeniu końcowym użytkownika i uzyskiwać dostęp do tych informacji.
  5. Wyłączenie stosowania cookies może spowodować utrudnienia korzystanie z niektórych usług w ramach naszych serwisów internetowych, w szczególności wymagających logowania, czy personalizacji.
  6. Pliki cookies mogą być zamieszczane w urządzeniu końcowym użytkownika serwisu internetowego, a następnie wykorzystywane przez współpracujących z Serwisem reklamodawców, przez firmy badawcze oraz dostawców aplikacji multimedialnych.

Zasady opisane przy pomocy artykułu i w zgodzie z jednoznacznym zezwoleniem jego autora do użycia podlinkowanego tam tekstu polityki cookies.

Regulamin korzystania z serwisu i przetwarzania danych.

  1. Postanowienia ogólne
    1. Niniejszy regulamin określa zasady korzystania z serwisu dostępnego pod adresem regexp.pl (zwanego dalej "serwisem"), a w tym w szczególności z mechanizmów testowania wyrażeń regularnych.
    2. Autor niniejszego serwisu określony jest w jego stopce.
    3. Przeznaczeniem głównym istnienia serwisu jest testowanie poprawności wprowadzanych danych względem wprowadzonych wyrażeń regularnych.
    4. Charakter serwisu jest osobisty, a możliwość korzystania z jego funkcjonalności została udostępniona na zasadach pro bono publico.
    5. Osoba korzystająca z serwisu nazywana jest w niniejszym regulaminie "wprowadzającym" lub "użytkownikiem", a przesyłane bezpośrednio przez użytkownika do serwisu dane "wprowadzanymi".
    6. Uzupełnieniem niniejszego regulaminu jest "Polityka używania cookies i podobnych technologii".
  2. Warunki korzystania z serwisu
    1. Działanie serwisu opiera się na weryfikowaniu danych wprowadzanych przez użytkownika.
    2. Warunkiem bezwzględnym korzystania z serwisu jest posiadanie wszelkich praw do publikowania danych, które wprowadzane są za pośrednictwem serwisu.
    3. Wprowadzając do serwisu jakiekolwiek dane zgadzasz się na ich przetwarzanie i publikację (np. w formie historii dostępnej na stronie).
    4. Zabrania się wprowadzania danych będących danymi osobowymi, wrażliwymi, stanowiących tajemnice przedsiębiorstwa, danych które mogą naruszać prawa fizycznych lub prawnych osób trzecich, co do których wprowadzający nie ma prawa do publikacji lub przetwarzania w obrębie serwisu.
    5. Wprowadzający bierze pełną odpowiedzialność za to, że dane wprowadzane są zgodne z niniejszym regulaminem oraz polskim prawem.
    6. Autor będzie reagował na zgłoszenia dotyczące naruszeń w racjonalnym czasie, po skutecznym odczytaniu zgłoszenia o potencjalnym naruszeniu.
  3. Zakres przetwarzania danych
    1. Serwis gromadzi dane niezbędne do swojego funkcjonowania zwane dalej w całości "danymi".
    2. Serwis nie profiluje użytkowników, a dane nie są gromadzone w celu identyfikacji tożsamości osób fizycznych.
    3. Z serwisu korzystają użytkownicy niezarejestrowani.
    4. W związku z przeznaczeniem działalności serwisu gromadzone są dane wprowadzane przez użytkowników, określone w warunkach korzystania z serwisu.
    5. Równolegle wraz z wprowadzaniem przez użytkownika zbierane i zapisywane są informacje o dacie wykonania akcji oraz adres IP wprowadzającego lub inne, pozyskane z ogólnodostępnych baz danych WHOIS informacje techniczne o adresie IP.
    6. Na płaszczyźnie serwerowej zbierane są logi.
    7. Ze względu na prowadzony profil działalności do danych może mieć dostęp dostawca usług internetowych zasobów serwerowych obsługujący serwis.
    8. Dane nie są automatycznie udostępniane podmiotom trzecim.
    9. Informacje wspierające zbieranie statystyk mogą być przekazywane do zewnętrznej usługi Google Statistics zgodnie z polityką prywatności firmy Google.
    10. W przypadkach prawnie uzasadnionych, np. na wniosek odpowiednich służb poszczególne dane mogą być udostępnione uprawnionym podmiotom.

regexp.pl

tester wyrażeń regularnych

Zmień język na polski.

Zmień język na angielski.

Pokaż/ukryj listę ostatnich testów.

Pokaż listę tylko moich testów.

Pokaż listę wszystkich testów.

Wyświetl zawartość kanału RSS.

Pokaż pomoc.

Rozwiń listę wyników, aby zobaczyć rezultat testu.

Tester wyrażeń regularnych pozwoli Ci w prosty sposób sprawdzić poprawność wykorzystywnego wzorca i frazy. Wystarczy, że wypełnisz poniższy formularz, a skrypt zwróci wszelkie niezbędne do walidacji dane.

Dodając wzorzec i ciąg znaków do sprawdzenia potwierdzasz, że masz pełne prawa do upubliczniania zawartych w nich treści oraz, że akceptujesz regulamin korzystania z serwisu.

ID Wyrażenie regularne Ciąg znaków Wynik Zwracane ciągi znaków Link
25538 /[a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*$/ asd prawda
  1. asd
25537 /^[a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*$/ ... fałsz
25536 /^[a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*$/ zxc prawda
  1. zxc
25535 /^[a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*$/ sdf prawda
  1. sdf
25534 /^[a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]$/ abc fałsz
25533 /^[a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*$/ abc.- fałsz
25532 /^[a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*$/ abc prawda
  1. abc
25531 char* #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
# include <windows.h>

typedef struct firmy //struktura
{
char miejsce_ranking[8];
char spadek_ranking[3];
char nazwa_firma[110];
char lokalizacja_firma[25];
char przychod[40];
char dynamika_przychod[35];
char zmiana_przychod[30];
char eksport[40];
char etaty[23];
};


int UsunSpacjeL(char *buffer, int size) //usuwa spacje po lewej stronie od znaków
{
int i = 0;
char *temp;
while(isblank(buffer[i]))
{
i++;
}
temp = malloc ((size -i) * sizeof(char));
strncpy(temp, buffer+i, size-i);
strcpy(buffer, temp);
buffer[size-i] = 0;
return(size-i);
}
prawda
  1. char
  2. char
  3. char
  4. char
  5. char
  6. char
  7. char
  8. char
  9. char
  10. char
  11. char
  12. char
25530 char* #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
# include <windows.h>

typedef struct firmy //struktura
{
char miejsce_ranking[8];
char spadek_ranking[3];
char nazwa_firma[110];
char lokalizacja_firma[25];
char przychod[40];
char dynamika_przychod[35];
char zmiana_przychod[30];
char eksport[40];
char etaty[23];
};


int UsunSpacjeL(char *buffer, int size) //usuwa spacje po lewej stronie od znaków
{
int i = 0;
char *temp;
while(isblank(buffer[i]))
{
i++;
}
temp = malloc ((size -i) * sizeof(char));
strncpy(temp, buffer+i, size-i);
strcpy(buffer, temp);
buffer[size-i] = 0;
return(size-i);
}


void UsunSpacjeP(char *buffer, int size) //usuwa spacje po prawej stronie od znaków
{
int i = size - 1;
char *temp;
while(isblank(buffer[i]))
{
i--;
}

temp = malloc ((i+1) * sizeof(char));
strncpy(temp, buffer, i+1);
strcpy(buffer, temp);
buffer[i+1]=0;
}


void DuzaLit(char *buffer) //zamienia znak na dużš literę
{
while(*buffer!='')
{
*buffer=toupper(*buffer);
buffer++;
}
}


void MalaLit(char *buffer) //zamienia znak na małš lietrę
{
while(*buffer!='')
{
*buffer=tolower(*buffer);
buffer++;
}
}


void SlowaNaDuze( char *buffer) // zamienia cišgi znaków zgodnie z poleceniem(tylko pierwszy duzy) dodałem również, aby zamieniał na dużš po kropce oraz myslniku dla lepszej czytelnoœci
{
char *wsk = buffer;
if( !*wsk )
wsk = buffer;

*wsk = toupper( *wsk );
while( *++wsk )

if( *(wsk-1) == ' ' || *(wsk-1) == '.' || *(wsk-1) == '-' )
*wsk = toupper( *wsk );

wsk = buffer;
}


void PrzecinekNaKropke(char *buffer) // zamienia przecinek dziesietny na kropkę dziesiętnš
{
char *temp = strstr(buffer, ",");
char *tempchar = malloc ( 50 * sizeof(char));
char *temptemp = buffer;

if(temp)
{
strncpy(tempchar, buffer, temp-buffer);
tempchar[temp-buffer] = '.';
tempchar[temp-buffer+1] = 0;
strcat(tempchar, buffer+(temp-buffer+1));
strcpy(buffer, tempchar);
}

}


void O_NaZero(char *buffer) // zamienia literę 'O' na cyfrę '0'
{
char *temp = strstr(buffer, "O");
char *tempchar = malloc ( 50 * sizeof(char));
char *temptemp = buffer;

if(temp)
{
strncpy(tempchar, buffer, temp-buffer);
tempchar[temp-buffer] = '0';
tempchar[temp-buffer+1] = 0;
strcat(tempchar, buffer+(temp-buffer+1));
strcpy(buffer, tempchar);
}

}

void I_NaJeden(char *buffer) // zamienia literę 'I' na cyfrę '1'
{
char *temp = strstr(buffer, "I");
char *tempchar = malloc ( 50 * sizeof(char));
char *temptemp = buffer;

if(temp)
{
strncpy(tempchar, buffer, temp-buffer);
tempchar[temp-buffer] = '1';
tempchar[temp-buffer+1] = 0;
strcat(tempchar, buffer+(temp-buffer+1));
strcpy(buffer, tempchar);
}

}

void Bd_NaZero(char *buffer) //po konsultacji z dr inż. Opalińskim dowiedziałem sie, że "bd" w moim pliku wejœciowym nie sš brakami danych, które trzeba skorygować przy pomocy sztucznej sieci neuronowej, a jedynie złym skopiowaniem danych tego pliku.Dr inż. Opaliński zasugerował, aby "bd" traktować jako 0, ja poki co traktuje je jako 00, aby wyróżniały się w pliku.
{
char *temp = strstr(buffer, "bd");
char *tempchar = malloc ( 50 * sizeof(char));
char *temptemp = buffer;

if(temp)
{
strncpy(tempchar, buffer, temp-buffer);
tempchar[temp-buffer] = '0';
tempchar[temp-buffer+1] = '0';
tempchar[temp-buffer+2] = 0;
strcat(tempchar, buffer+(temp-buffer+2));
strcpy(buffer, tempchar);
}

}

int SprawdzPoleLiczba(char *buffer) // sprawdza odpowiednie pola liczbowe i wykrywa w nich dane błędne bšdŸ niekompletne
{
int i = 0;
int returning = 0;
while(buffer[i] != 0)
{
if( (!isdigit(buffer[i])) && (buffer[i]!='.') && (buffer[i]!='%') && (buffer[i]!='-') )
{
returning = 1;
}

i++;
}
return returning;
}


void PokazLinie(struct firmy * ranking_firmy) // do wyswietlania niekompletnych linii
{
printf("*************************************************************************n");
printf("UWAGA!!! Rekord,w ktorym wystepuje choc jedno pole z brakiem danych!!!n");
printf("Miejsce: %sn", ranking_firmy->miejsce_ranking);
printf("Spadek z roku 2004: %sn", ranking_firmy->spadek_ranking);
printf("Nazwa firmy: %sn", ranking_firmy->nazwa_firma);
printf("Lokalizacja: %sn", ranking_firmy->lokalizacja_firma);
printf("Przychody: %sn", ranking_firmy->przychod);
printf("Dynamika przychodow: %sn", ranking_firmy->dynamika_przychod);
printf("Zmiana dynamiki przychodow: %sn", ranking_firmy->zmiana_przychod);
printf("Eksport: %sn", ranking_firmy->eksport);
printf("Etaty: %snn", ranking_firmy->etaty);

}


//Częœć Główna Programu *****************************************************************************************

main()
{
FILE * pFile;
int i=0, j=0;
char dane [106][288];
char nazwapliku[40];
char *wsk_koniec,*wsk_znak;
char znak[9];
int wielkosc;


int debuging = 0; //pomocnicza przy ew. wyœwietlaniu wczytanego pliku bšdŸ nie


struct firmy ranking_firmy[106];
printf("nntt ****************n");
printf("ttt*PROGRAM IMPORT*n");
printf("tt ****************nnnnn");
printf("ttPodaj nazwe pliku wraz z rozszerzeniem: ");
scanf("%s",nazwapliku, "r");
system("cls");
printf("nnnProgram wyswietli tylko te rekordy, w ktorych znajduja sie braki danych...");
Sleep(2500);
system("cls");
pFile = fopen (nazwapliku, "r");
if (pFile == NULL)
{
printf("aERROR!nBlad odczytu pliku...n");
}
else
{
do{
//for(j=0;j<10;j++) { // w razie gdy chcę wczytywać mniejsza czeœc pliku(mniej rekordow)

wsk_koniec=fgets(dane[i],sizeof(dane), pFile);

wsk_znak=dane[i];
strncpy(znak, wsk_znak,1);
znak[1] = 0;
if(strcmp(znak, "ł"))
{
continue;
}
wsk_znak++;
strncpy(znak, wsk_znak, 7);
if(!strcmp(znak, "Miejsce"))
{
continue;
}

strncpy(ranking_firmy[i].miejsce_ranking,wsk_znak,7);
wielkosc = UsunSpacjeL(ranking_firmy[i].miejsce_ranking, 7);
UsunSpacjeP(ranking_firmy[i].miejsce_ranking, wielkosc);
I_NaJeden(ranking_firmy[i].miejsce_ranking);
if(debuging)
{
puts( ranking_firmy[i].miejsce_ranking);
}


wsk_znak=wsk_znak+8;
strncpy(ranking_firmy[i].spadek_ranking,wsk_znak,18);
wielkosc = UsunSpacjeL(ranking_firmy[i].spadek_ranking, 18);
UsunSpacjeP(ranking_firmy[i].spadek_ranking, wielkosc);
DuzaLit(ranking_firmy[i].spadek_ranking);
if(debuging)
{
puts(ranking_firmy[i].spadek_ranking);
}


wsk_znak=wsk_znak+19;
strncpy(ranking_firmy[i].nazwa_firma,wsk_znak,80);
wielkosc = UsunSpacjeL(ranking_firmy[i].nazwa_firma, 80);
UsunSpacjeP(ranking_firmy[i].nazwa_firma, wielkosc);
MalaLit(ranking_firmy[i].nazwa_firma);
SlowaNaDuze(ranking_firmy[i].nazwa_firma);
if(debuging)
{
puts(ranking_firmy[i].nazwa_firma);
}


wsk_znak=wsk_znak+81;
strncpy(ranking_firmy[i].lokalizacja_firma,wsk_znak,18);
wielkosc = UsunSpacjeL(ranking_firmy[i].lokalizacja_firma, 18);
UsunSpacjeP(ranking_firmy[i].lokalizacja_firma, wielkosc);
MalaLit(ranking_firmy[i].lokalizacja_firma);
SlowaNaDuze(ranking_firmy[i].lokalizacja_firma);
if(debuging)
{
puts(ranking_firmy[i].lokalizacja_firma);
}


wsk_znak=wsk_znak+19;
strncpy(ranking_firmy[i].przychod,wsk_znak,36);
wielkosc = UsunSpacjeL(ranking_firmy[i].przychod, 36);
UsunSpacjeP(ranking_firmy[i].przychod, wielkosc);
PrzecinekNaKropke(ranking_firmy[i].przychod);
O_NaZero(ranking_firmy[i].przychod);
Bd_NaZero(ranking_firmy[i].przychod);
if(debuging)
{
puts(ranking_firmy[i].przychod);
}


wsk_znak=wsk_znak+37;
strncpy(ranking_firmy[i].dynamika_przychod,wsk_znak,29);
wielkosc = UsunSpacjeL(ranking_firmy[i].dynamika_przychod, 29);
UsunSpacjeP(ranking_firmy[i].dynamika_przychod, wielkosc);
PrzecinekNaKropke(ranking_firmy[i].dynamika_przychod);
O_NaZero(ranking_firmy[i].dynamika_przychod);
Bd_NaZero(ranking_firmy[i].dynamika_przychod);
if(debuging)
{
puts(ranking_firmy[i].dynamika_przychod);
}


wsk_znak=wsk_znak+30;
strncpy(ranking_firmy[i].zmiana_przychod,wsk_znak,26);
wielkosc = UsunSpacjeL(ranking_firmy[i].zmiana_przychod, 26);
UsunSpacjeP(ranking_firmy[i].zmiana_przychod, wielkosc);
PrzecinekNaKropke(ranking_firmy[i].zmiana_przychod);
O_NaZero(ranking_firmy[i].zmiana_przychod);
Bd_NaZero(ranking_firmy[i].zmiana_przychod);
if(debuging)
{
puts(ranking_firmy[i].zmiana_przychod);
}


wsk_znak=wsk_znak+27;
strncpy(ranking_firmy[i].eksport,wsk_znak,32);
wielkosc = UsunSpacjeL(ranking_firmy[i].eksport, 32);
UsunSpacjeP(ranking_firmy[i].eksport, wielkosc);
PrzecinekNaKropke(ranking_firmy[i].eksport);
O_NaZero(ranking_firmy[i].eksport);
Bd_NaZero(ranking_firmy[i].eksport);
if(debuging)
{
puts(ranking_firmy[i].eksport);
}


wsk_znak=wsk_znak+33;
strncpy(ranking_firmy[i].etaty,wsk_znak,20);
wielkosc = UsunSpacjeL(ranking_firmy[i].etaty, 20);
UsunSpacjeP(ranking_firmy[i].etaty, wielkosc);
O_NaZero(ranking_firmy[i].etaty);
Bd_NaZero(ranking_firmy[i].etaty);
if(debuging)
{
puts( ranking_firmy[i].etaty);
}


if( (SprawdzPoleLiczba((ranking_firmy+i)->przychod)) || (SprawdzPoleLiczba((ranking_firmy+i)->dynamika_przychod)) || (SprawdzPoleLiczba((ranking_firmy+i)->zmiana_przychod)) || (SprawdzPoleLiczba((ranking_firmy+i)->eksport)) || (SprawdzPoleLiczba((ranking_firmy+i)->etaty)) )
{
PokazLinie(ranking_firmy+i); // tutaj drukowane tylko te rekord w których występujš braki danych
}
else
{
FILE *bin=fopen("Dane poprawione.txt", "wb");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
# include <windows.h>

typedef struct firmy //struktura
{
char miejsce_ranking[8];
char spadek_ranking[3];
char nazwa_firma[110];
char lokalizacja_firma[25];
char przychod[40];
char dynamika_przychod[35];
char zmiana_przychod[30];
char eksport[40];
char etaty[23];
};


int UsunSpacjeL(char *buffer, int size) //usuwa spacje po lewej stronie od znaków
{
int i = 0;
char *temp;
while(isblank(buffer[i]))
{
i++;
}
temp = malloc ((size -i) * sizeof(char));
strncpy(temp, buffer+i, size-i);
strcpy(buffer, temp);
buffer[size-i] = 0;
return(size-i);
}

if (bin == NULL)
{
printf("blad otwarcia BINARNEGO");
}
fwrite(ranking_firmy, sizeof(PokazLinie(ranking_firmy)), 100000, bin);
fclose(bin);
}


i++;

}
while (wsk_koniec!=NULL);
}

fclose (pFile);

system("PAUSE");
}
prawda
  1. char
  2. char
  3. char
  4. char
  5. char
  6. char
  7. char
  8. char
  9. char
  10. char
  11. char
  12. char
  13. char
  14. char
  15. char
  16. char
  17. char
  18. char
  19. char
  20. char
  21. char
  22. char
  23. char
  24. char
  25. char
  26. char
  27. char
  28. char
  29. char
  30. char
  31. char
  32. char
  33. char
  34. char
  35. char
  36. char
  37. char
  38. char
  39. char
  40. char
  41. char
  42. char
  43. char
  44. char
  45. char
  46. char
  47. char
  48. char
  49. char
  50. char
  51. char
  52. char
  53. char
  54. char
  55. char
  56. char
  57. char
  58. char
  59. char
  60. char
  61. char
  62. char
  63. char
  64. char
  65. char
  66. char
  67. char
  68. char
  69. char
  70. char
  71. char
  72. char
  73. char
  74. char
  75. char
  76. char
  77. char
  78. char
  79. char
  80. char
  81. char
25529 char*\; #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
# include <windows.h>

typedef struct firmy //struktura
{
char miejsce_ranking[8];
char spadek_ranking[3];
char nazwa_firma[110];
char lokalizacja_firma[25];
char przychod[40];
char dynamika_przychod[35];
char zmiana_przychod[30];
char eksport[40];
char etaty[23];
};


int UsunSpacjeL(char *buffer, int size) //usuwa spacje po lewej stronie od znaków
{
int i = 0;
char *temp;
while(isblank(buffer[i]))
{
i++;
}
temp = malloc ((size -i) * sizeof(char));
strncpy(temp, buffer+i, size-i);
strcpy(buffer, temp);
buffer[size-i] = 0;
return(size-i);
}


void UsunSpacjeP(char *buffer, int size) //usuwa spacje po prawej stronie od znaków
{
int i = size - 1;
char *temp;
while(isblank(buffer[i]))
{
i--;
}

temp = malloc ((i+1) * sizeof(char));
strncpy(temp, buffer, i+1);
strcpy(buffer, temp);
buffer[i+1]=0;
}


void DuzaLit(char *buffer) //zamienia znak na dużš literę
{
while(*buffer!='')
{
*buffer=toupper(*buffer);
buffer++;
}
}


void MalaLit(char *buffer) //zamienia znak na małš lietrę
{
while(*buffer!='')
{
*buffer=tolower(*buffer);
buffer++;
}
}


void SlowaNaDuze( char *buffer) // zamienia cišgi znaków zgodnie z poleceniem(tylko pierwszy duzy) dodałem również, aby zamieniał na dużš po kropce oraz myslniku dla lepszej czytelnoœci
{
char *wsk = buffer;
if( !*wsk )
wsk = buffer;

*wsk = toupper( *wsk );
while( *++wsk )

if( *(wsk-1) == ' ' || *(wsk-1) == '.' || *(wsk-1) == '-' )
*wsk = toupper( *wsk );

wsk = buffer;
}


void PrzecinekNaKropke(char *buffer) // zamienia przecinek dziesietny na kropkę dziesiętnš
{
char *temp = strstr(buffer, ",");
char *tempchar = malloc ( 50 * sizeof(char));
char *temptemp = buffer;

if(temp)
{
strncpy(tempchar, buffer, temp-buffer);
tempchar[temp-buffer] = '.';
tempchar[temp-buffer+1] = 0;
strcat(tempchar, buffer+(temp-buffer+1));
strcpy(buffer, tempchar);
}

}


void O_NaZero(char *buffer) // zamienia literę 'O' na cyfrę '0'
{
char *temp = strstr(buffer, "O");
char *tempchar = malloc ( 50 * sizeof(char));
char *temptemp = buffer;

if(temp)
{
strncpy(tempchar, buffer, temp-buffer);
tempchar[temp-buffer] = '0';
tempchar[temp-buffer+1] = 0;
strcat(tempchar, buffer+(temp-buffer+1));
strcpy(buffer, tempchar);
}

}

void I_NaJeden(char *buffer) // zamienia literę 'I' na cyfrę '1'
{
char *temp = strstr(buffer, "I");
char *tempchar = malloc ( 50 * sizeof(char));
char *temptemp = buffer;

if(temp)
{
strncpy(tempchar, buffer, temp-buffer);
tempchar[temp-buffer] = '1';
tempchar[temp-buffer+1] = 0;
strcat(tempchar, buffer+(temp-buffer+1));
strcpy(buffer, tempchar);
}

}

void Bd_NaZero(char *buffer) //po konsultacji z dr inż. Opalińskim dowiedziałem sie, że "bd" w moim pliku wejœciowym nie sš brakami danych, które trzeba skorygować przy pomocy sztucznej sieci neuronowej, a jedynie złym skopiowaniem danych tego pliku.Dr inż. Opaliński zasugerował, aby "bd" traktować jako 0, ja poki co traktuje je jako 00, aby wyróżniały się w pliku.
{
char *temp = strstr(buffer, "bd");
char *tempchar = malloc ( 50 * sizeof(char));
char *temptemp = buffer;

if(temp)
{
strncpy(tempchar, buffer, temp-buffer);
tempchar[temp-buffer] = '0';
tempchar[temp-buffer+1] = '0';
tempchar[temp-buffer+2] = 0;
strcat(tempchar, buffer+(temp-buffer+2));
strcpy(buffer, tempchar);
}

}

int SprawdzPoleLiczba(char *buffer) // sprawdza odpowiednie pola liczbowe i wykrywa w nich dane błędne bšdŸ niekompletne
{
int i = 0;
int returning = 0;
while(buffer[i] != 0)
{
if( (!isdigit(buffer[i])) && (buffer[i]!='.') && (buffer[i]!='%') && (buffer[i]!='-') )
{
returning = 1;
}

i++;
}
return returning;
}


void PokazLinie(struct firmy * ranking_firmy) // do wyswietlania niekompletnych linii
{
printf("*************************************************************************n");
printf("UWAGA!!! Rekord,w ktorym wystepuje choc jedno pole z brakiem danych!!!n");
printf("Miejsce: %sn", ranking_firmy->miejsce_ranking);
printf("Spadek z roku 2004: %sn", ranking_firmy->spadek_ranking);
printf("Nazwa firmy: %sn", ranking_firmy->nazwa_firma);
printf("Lokalizacja: %sn", ranking_firmy->lokalizacja_firma);
printf("Przychody: %sn", ranking_firmy->przychod);
printf("Dynamika przychodow: %sn", ranking_firmy->dynamika_przychod);
printf("Zmiana dynamiki przychodow: %sn", ranking_firmy->zmiana_przychod);
printf("Eksport: %sn", ranking_firmy->eksport);
printf("Etaty: %snn", ranking_firmy->etaty);

}


//Częœć Główna Programu *****************************************************************************************

main()
{
FILE * pFile;
int i=0, j=0;
char dane [106][288];
char nazwapliku[40];
char *wsk_koniec,*wsk_znak;
char znak[9];
int wielkosc;


int debuging = 0; //pomocnicza przy ew. wyœwietlaniu wczytanego pliku bšdŸ nie


struct firmy ranking_firmy[106];
printf("nntt ****************n");
printf("ttt*PROGRAM IMPORT*n");
printf("tt ****************nnnnn");
printf("ttPodaj nazwe pliku wraz z rozszerzeniem: ");
scanf("%s",nazwapliku, "r");
system("cls");
printf("nnnProgram wyswietli tylko te rekordy, w ktorych znajduja sie braki danych...");
Sleep(2500);
system("cls");
pFile = fopen (nazwapliku, "r");
if (pFile == NULL)
{
printf("aERROR!nBlad odczytu pliku...n");
}
else
{
do{
//for(j=0;j<10;j++) { // w razie gdy chcę wczytywać mniejsza czeœc pliku(mniej rekordow)

wsk_koniec=fgets(dane[i],sizeof(dane), pFile);

wsk_znak=dane[i];
strncpy(znak, wsk_znak,1);
znak[1] = 0;
if(strcmp(znak, "ł"))
{
continue;
}
wsk_znak++;
strncpy(znak, wsk_znak, 7);
if(!strcmp(znak, "Miejsce"))
{
continue;
}

strncpy(ranking_firmy[i].miejsce_ranking,wsk_znak,7);
wielkosc = UsunSpacjeL(ranking_firmy[i].miejsce_ranking, 7);
UsunSpacjeP(ranking_firmy[i].miejsce_ranking, wielkosc);
I_NaJeden(ranking_firmy[i].miejsce_ranking);
if(debuging)
{
puts( ranking_firmy[i].miejsce_ranking);
}


wsk_znak=wsk_znak+8;
strncpy(ranking_firmy[i].spadek_ranking,wsk_znak,18);
wielkosc = UsunSpacjeL(ranking_firmy[i].spadek_ranking, 18);
UsunSpacjeP(ranking_firmy[i].spadek_ranking, wielkosc);
DuzaLit(ranking_firmy[i].spadek_ranking);
if(debuging)
{
puts(ranking_firmy[i].spadek_ranking);
}


wsk_znak=wsk_znak+19;
strncpy(ranking_firmy[i].nazwa_firma,wsk_znak,80);
wielkosc = UsunSpacjeL(ranking_firmy[i].nazwa_firma, 80);
UsunSpacjeP(ranking_firmy[i].nazwa_firma, wielkosc);
MalaLit(ranking_firmy[i].nazwa_firma);
SlowaNaDuze(ranking_firmy[i].nazwa_firma);
if(debuging)
{
puts(ranking_firmy[i].nazwa_firma);
}


wsk_znak=wsk_znak+81;
strncpy(ranking_firmy[i].lokalizacja_firma,wsk_znak,18);
wielkosc = UsunSpacjeL(ranking_firmy[i].lokalizacja_firma, 18);
UsunSpacjeP(ranking_firmy[i].lokalizacja_firma, wielkosc);
MalaLit(ranking_firmy[i].lokalizacja_firma);
SlowaNaDuze(ranking_firmy[i].lokalizacja_firma);
if(debuging)
{
puts(ranking_firmy[i].lokalizacja_firma);
}


wsk_znak=wsk_znak+19;
strncpy(ranking_firmy[i].przychod,wsk_znak,36);
wielkosc = UsunSpacjeL(ranking_firmy[i].przychod, 36);
UsunSpacjeP(ranking_firmy[i].przychod, wielkosc);
PrzecinekNaKropke(ranking_firmy[i].przychod);
O_NaZero(ranking_firmy[i].przychod);
Bd_NaZero(ranking_firmy[i].przychod);
if(debuging)
{
puts(ranking_firmy[i].przychod);
}


wsk_znak=wsk_znak+37;
strncpy(ranking_firmy[i].dynamika_przychod,wsk_znak,29);
wielkosc = UsunSpacjeL(ranking_firmy[i].dynamika_przychod, 29);
UsunSpacjeP(ranking_firmy[i].dynamika_przychod, wielkosc);
PrzecinekNaKropke(ranking_firmy[i].dynamika_przychod);
O_NaZero(ranking_firmy[i].dynamika_przychod);
Bd_NaZero(ranking_firmy[i].dynamika_przychod);
if(debuging)
{
puts(ranking_firmy[i].dynamika_przychod);
}


wsk_znak=wsk_znak+30;
strncpy(ranking_firmy[i].zmiana_przychod,wsk_znak,26);
wielkosc = UsunSpacjeL(ranking_firmy[i].zmiana_przychod, 26);
UsunSpacjeP(ranking_firmy[i].zmiana_przychod, wielkosc);
PrzecinekNaKropke(ranking_firmy[i].zmiana_przychod);
O_NaZero(ranking_firmy[i].zmiana_przychod);
Bd_NaZero(ranking_firmy[i].zmiana_przychod);
if(debuging)
{
puts(ranking_firmy[i].zmiana_przychod);
}


wsk_znak=wsk_znak+27;
strncpy(ranking_firmy[i].eksport,wsk_znak,32);
wielkosc = UsunSpacjeL(ranking_firmy[i].eksport, 32);
UsunSpacjeP(ranking_firmy[i].eksport, wielkosc);
PrzecinekNaKropke(ranking_firmy[i].eksport);
O_NaZero(ranking_firmy[i].eksport);
Bd_NaZero(ranking_firmy[i].eksport);
if(debuging)
{
puts(ranking_firmy[i].eksport);
}


wsk_znak=wsk_znak+33;
strncpy(ranking_firmy[i].etaty,wsk_znak,20);
wielkosc = UsunSpacjeL(ranking_firmy[i].etaty, 20);
UsunSpacjeP(ranking_firmy[i].etaty, wielkosc);
O_NaZero(ranking_firmy[i].etaty);
Bd_NaZero(ranking_firmy[i].etaty);
if(debuging)
{
puts( ranking_firmy[i].etaty);
}


if( (SprawdzPoleLiczba((ranking_firmy+i)->przychod)) || (SprawdzPoleLiczba((ranking_firmy+i)->dynamika_przychod)) || (SprawdzPoleLiczba((ranking_firmy+i)->zmiana_przychod)) || (SprawdzPoleLiczba((ranking_firmy+i)->eksport)) || (SprawdzPoleLiczba((ranking_firmy+i)->etaty)) )
{
PokazLinie(ranking_firmy+i); // tutaj drukowane tylko te rekord w których występujš braki danych
}
else
{
FILE *bin=fopen("Dane poprawione.txt", "wb");
if (bin == NULL)
{
printf("blad otwarcia BINARNEGO");
}
fwrite(ranking_firmy, sizeof(PokazLinie(ranking_firmy)), 100000, bin);
fclose(bin);
}


i++;

}
while (wsk_koniec!=NULL);
}

fclose (pFile);

system("PAUSE");
}
fałsz
25528 /CARD.SERVICE.RFEE/ CARD.SERVICE.USAGE fałsz
25527 /CARD.SERVICE.RFEE/ CARD.SERVICE.RFEE prawda
  1. CARD.SERVICE.RFEE
25526 /^CARD.SERVICE.RFEE/ CARD.SERVICE.RFEE prawda
  1. CARD.SERVICE.RFEE
25525 ^[-]?[0-9]{1,}(\,[0-9]{2})?$ -0,dsf fałsz
25524 ^[-]?[0-9]{1,}(\,[0-9]{2})?$ -0, fałsz
25523 ^[-]?[0-9]{1,}(\,[0-9]{2})?$ -0,11 prawda
  1. -0,11
    • ,11
25522 ^[-]?[0-9]{1,}(\,[0-9]{2})?$ 0,11 prawda
  1. 0,11
    • ,11
25521 ^[-]?[0-9]{1,}(\,[0-9]{2})?$ 0,1 fałsz
25520 ^[-]?[0-9]{1,}(\,[0-9]{2})?$ 0, fałsz
25519 ^[-]?[0-9]{1,}(\,[0-9]{0,2})?$ 0, prawda
  1. 0,
    • ,
25518 ^[-]?([0-9]{1,}(\,[0-9]{0,2}){0,1})$ 0, prawda
  1. 0,
    • 0,
    • ,
25517 ^[-]?([0-9]{1,}(\,[0-9]{0,2}))?$ 0, prawda
  1. 0,
    • 0,
    • ,
25516 ^[-]?([0-9]{1,}(\,[0-9]{0,2}))?$ 0,22123 fałsz
25515 ^[-]?([0-9]{1,}(\,[0-9]{0,2}))?$ 0,2 prawda
  1. 0,2
    • 0,2
    • ,2
25514 [+]?[0-9]*.*,?[0-9]+ 123,.22 prawda
  1. 123,.22

« poprzednia 1 216783 16784 16785 16786 16787 16788 16789 16790 16791 16792 1679317808 17809 następna »