Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Parsiranje stringa

[es] :: C/C++ programiranje :: Parsiranje stringa

[ Pregleda: 2999 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

krul
Cardak ni na nebu ...

Član broj: 16060
Poruke: 85
*.creo.com



+1 Profil

icon Parsiranje stringa05.10.2004. u 00:25 - pre 237 meseci

Evo buduci da nemam iskustva sa C jezikom odlucih se da se obratim iskusnim
c programerima u nadi da mi ponudite resenje.
Naime problem je jednostavan: moj program treba da uzme od korisnika
serijski broj koji ujedno postaje i ime log fajla.
Buduci da fajl sa unetim serijskim brojem moze vec postojati na lokaciji
na kojoj isti zelim da sacuvam nameravam da proverim dali isti postoji i
ako da, da dodam _ i broj. Sto znaci da mogu da imam x broj fajlova sledeceg
karaktera:
A1245
A1245_1
A1245_2
A1245_3
...

Znaci sistem bi trebao da parsira string odnosno karaktere do underscora ako takav postoji
i da procita zadnji u nizu i doda novi broj.
Znam kako bi to izveo u VB, postoji Rigt funkcija koja mi cita karaktere sa desne strane zadanog stringa, ali koliko vidim u C-u je string prica puno ozbiljnija. U stvari string i ne postoji kao tip podatka. Samo karakter. Nadam se da sam problem jasno izneo.
Isto tako bi bilo dobro ako neko moze da me uputi na teoriju koja jasno obradjuje problematiku stringa u C.
Umalo da zaboravim, ceo kod je unutar "interpreted enviromente" koji poseduje vecinu ali ne i sve
funkcije standardne biblioteke c-a.

Unapred zahvalan.

output = fopen(ffullname,"r");
do
{
if (output != NULL)
{
// Close open file
fclose(output);

if (strstr(fname,"_") != NULL)
{

strcpy(tmp, " Vise od jednog");
gets(tmp);
}
else
{
strcat(fname, "_1");
strcpy(tmp, fname);
gets(tmp);
}

strcpy(ffullname, ARCHIVE);
strcat(ffullname, fname);
//Open file with new name
output = fopen(ffullname,"r");
}
} while (output != NULL);

Jednostavnost! Odlika genijalnosti
 
Odgovor na temu

u_m
Urukalo Milan
PH

Član broj: 18631
Poruke: 889
*.wireless.org.yu

ICQ: 32554731
Sajt: https://milan.urukalo.com


Profil

icon Re: Parsiranje stringa05.10.2004. u 01:24 - pre 237 meseci
ja sam jos veci pocetnik od tebe, ali bar da dam neki savjet:

kad gledas da li postoji fajl A1234, i ako postoji, onda idi redom probaj da li postoji A1224_1 ...

i samim tim kad naletis na nepostojeci ljepo ga kreiras i gotovo



#include <music.h>
#include <beer.h>
#include <girls.h>
main(){ run(partytime);}
---------
Moj licni sajt
Moj wap sajt--offline
 
Odgovor na temu

zvrba
The Lord of Chaos

Član broj: 31716
Poruke: 105
*.fina.hr



Profil

icon Re: Parsiranje stringa05.10.2004. u 07:57 - pre 237 meseci
Dakle, da se nastavim na prethodni odgovor. Evo funkcija koja vraca u varijabli name pravo ime, te vraca FILE* na otvoreni fajl za pisanje. name mora biti buffer dovoljno dugacak da se appenda _XX gdje je XX broj.

Code:

FILE *open_log(char *name)
{
  FILE *f;
  int i = 0, len = strlen(name);

  /* da li postoji osnovno ime? */
  if(!(f = fopen(name, "r"))) return fopen(name, "w");

  /* dodaj _XX */
  while(1) {
    sprintf(name+len, "_%d", i);
    if(f = fopen(name, "r")) {
      /* fajl postoji, zatvori ga i i probaj veci broj */
      fclose(f);
      ++i;
    } else {
      return fopen(name, "w");
    }
  }
}

 
Odgovor na temu

krul
Cardak ni na nebu ...

Član broj: 16060
Poruke: 85
*.creo.com



+1 Profil

icon Re: Parsiranje stringa05.10.2004. u 17:29 - pre 237 meseci
To je to zvrba.
Puno hvala.
Pozdrav
Jednostavnost! Odlika genijalnosti
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.beotel.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: Parsiranje stringa05.10.2004. u 21:51 - pre 237 meseci
ukoliko imas neka ozbiljnija parsiranja stringova, ja bih ti preporucio da pogledas malo lex + yacc

to su alati koji sluze izmedju ostalog i za pisanje kompajlera, ali mogu da posluze i za neke druge stvari. Lex i yacc generisu C kod koji posle normalno iskompajliras i koristis.

http://www.tldp.org/HOWTO/Lex-YACC-HOWTO.html
 
Odgovor na temu

krul
Cardak ni na nebu ...

Član broj: 16060
Poruke: 85
*.creo.com



+1 Profil

icon Re: Parsiranje stringa05.10.2004. u 22:02 - pre 237 meseci
Dejane, nemam nista ozbiljnije za sad ali bih volio da ovladam sa manipulacijom stringa koristeci c.
U svakom slucaju hvala za link.
Jednostavnost! Odlika genijalnosti
 
Odgovor na temu

ljube
Ljubiša Knežević
Banjaluka

Član broj: 22429
Poruke: 158
*.dialup.blic.net



+2 Profil

icon Re: Parsiranje stringa06.10.2004. u 06:40 - pre 237 meseci
Postoji i basic u C kovertor na http://bcx.basicguru.com/

Inace ima rjesenja za sve standardne basic naredbe koje rade sa stringovima. Ako ti vise "lezi" basic, probaj ovo i onda analiziraj generisani C kod.

Inace evo jedan primjer kako BCX prevede naredbu exist, odnosno kada tazi da li postoji fajl ili direktorij

If Exist("c:\temp") Then ....

Code:

BOOL Exist (char *szFilePath)
{
  if(instr(szFilePath,"*")||instr(szFilePath,"?"))
  return Exist_A (szFilePath);
  return Exist_B (szFilePath);
}

BOOL Exist_A (char *szFilePath)
{
  WIN32_FIND_DATA W32FindData;
  HANDLE rc;
  rc = FindFirstFile(szFilePath, &W32FindData);
  if(rc == INVALID_HANDLE_VALUE) return FALSE;
  FindClose(rc);
  return TRUE;
}

BOOL Exist_B (char *szFilePath)
{
  DWORD ret;
  ret = GetFileAttributes(szFilePath);
  if (ret != 0xffffffff) return TRUE;
  return FALSE;
}


Pozdrav,
Ljubisa
 
Odgovor na temu

[es] :: C/C++ programiranje :: Parsiranje stringa

[ Pregleda: 2999 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.