Pcre help! – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pcre help! – C / C++ – Fórum – Programujte.comPcre help! – C / C++ – Fórum – Programujte.com

 

Dodiq0
Newbie
15. 9. 2007   #1
-
0
-

Brý deň, chlapi, na základe sn3dovho článku som si chcel urobiť programček, ktorý by napr. z tohto formátu "23,32,43,2,34,43,43" vyberal čísla.
text je v súbore. neviete mi povedať, kde je tá chybička? poprípade viac..

#include <iostream>
using namespace std;
#include <fstream>
#include <pcre.h>
#define REG_EXP "[0-9]{1,2}"
#define VEC_SIZE 30
int main()
{
/*--------------------------------*/
pcre* re_handle;
const char* err;
int err_offset;
int ovector[VEC_SIZE];
int res;
int length;
char* a;
int pos=0;
char str[100];
int count_num=0;
int numbers[30];
int num;
/*--------------------------------*/
cout << "Zadaj meno suboru: ";
cin.getline(str,100);
ifstream infile;
infile.open(str,ios_base::binary);
cout << "File is open!\n";
if (infile.good())
{
infile.seekg (0, ios::end);
length = infile.tellg();
infile.seekg (0, ios::beg);
a=new char[length];
infile.read(a,length);
cout << "sstring is loaded!\n";
}else cout << "something went wrong!";
infile.close();
// compilation of expression
re_handle=pcre_compile(REG_EXP,0,&err,&err_offset,NULL);
if (!re_handle)
{
cout << "Error: " << err;
return 0;
}
const_cast<const char*> ( a );
while((res = pcre_exec(re_handle,NULL,a,length,pos,0,ovector,VEC_SIZE))>=0)
{
memcpy(&numbers[count_num],a+ovector[0],ovector[1]-ovector[0]);
count_num++;
pos=ovector[1];
}
for (int i=0;i<count_num;i++) cout << numbers[i] << " " ;
delete[] a;
return 0;
}

Nahlásit jako SPAM
IP: ...–
Beginner
Jura
~ Anonymní uživatel
637 příspěvků
15. 9. 2007   #2
-
0
-

A co to dělá nebo nedělá - trochu konkrétněji(chyby hlasí kompilátor nebo se objevují při běhu)? Je tu spousta lidí, ale když se zeptáš, kde je chybička, tak si myslím, že se na to většina vyprdne.

Nahlásit jako SPAM
IP: ...–
Dodiq0
Newbie
15. 9. 2007   #3
-
0
-

no chyba je v tom ze ono to zcompiluje, ale nevypíše to čísla, vybehne vystražne okno od Microsoftu, či im chcem poslať chybu, ktorú program spôsobil a potom sa program vypne.

Nahlásit jako SPAM
IP: ...–
Beginner
Dodiq0
Newbie
15. 9. 2007   #4
-
0
-

jo a ešte mám podozrenie,či nieje niekde chyba v tom while cykle.

Nahlásit jako SPAM
IP: ...–
Beginner
Dodiq0
Newbie
15. 9. 2007   #5
-
0
-

Dajak som to šalamúnsky vyriešil. namiesto to aby som to rovno zapisoval do číselného poľa, tak som to dal do znakového a potom konvertovam pomocou fkcie atoi na cislo a funguje to. Pre niekoho koho by zaujímalo riešenie a vedel by to nejak vylepšiť dám vám tu ten kódik:

#include <iostream>
using namespace std;
#include <fstream>
#include <pcre.h>
#include <cstdlib>
#define REG_EXP "[0-9]{1,2}"
#define VEC_SIZE 30
int main()
{
/*--------------------------------*/
pcre* re_handle;
const char* err;
int err_offset;
int ovector[VEC_SIZE];
int res=0;
int length;
char* a;
int pos=0;
char str[100];
int count_num=0;
int numbers[30];
int num=0;
int len=0;
ifstream infile("Skuska\\ofstream.txt",ios_base::in);
char t[10];
/*--------------------------------*/
//cout << "Zadaj meno suboru: ";
//cin.getline(str,100);
//infile.open(str,ios_base::binary);
cout << "File is open!\n";
if (infile.good())
{
infile.seekg (0, ios::end);
length = infile.tellg();
infile.seekg (0, ios::beg);
a=new char[length];
infile.read(a,length);
cout << "sstring is loaded!\n";
}else cout << "something went wrong!";
infile.close();
// compilation of expression
re_handle=pcre_compile(REG_EXP,0,&err,&err_offset,NULL);
if (!re_handle)
{
cout << "Error: " << err;
return 0;
}
const_cast<const char*> ( a );
while( (res = pcre_exec ( re_handle,NULL,a,length,pos,0,ovector,VEC_SIZE ) ) >=0 )
{
len=ovector[1]-ovector[0];
memcpy(t,(a+ovector[0]),(len) );
t[len]='\0';
numbers[num]=atoi(t);
cout << numbers[num] << " ";
num++;
pos=ovector[1];
}
delete[] a;
return 0;
}

Nahlásit jako SPAM
IP: ...–
Beginner
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 30 hostů

Podobná vlákna

C++, PCRE a replace — založil Heart Breaker

PCRE - vypisuje chybu — založil vollf82

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý