wyciaganie pojedynczych znakow z tablicy stringow

0

Witam,

00000001)14/06/07 2001 001001I|--/--/-/---|=4:2199=A4400 Version : R6.0.1-f1.603-1-c-pl-c6s2
Mam 2000 takich linijek i z kazdej z nich potrzebuje wyciagnac date i godzine. Cały plik wrzucam do tablicy i pozniej chcac wyswietlic np tab[1] wywala mi cała linijke.Czy da sie wyciagnac z tego pojedyncze znaki ?
Kawałek kodu:

for(i=0;i<=2999;i++){

getline( plik, dane[i] ); 
 }
 
              
cout<<"to ta linijka testowa "<<dane[1]; 

Jeśli nie da się tego wyciągnąć z tablicy jednowymiarowej to jak to zrobic na wielowymiarowej ? Tablica jest typu string.

0
std::getline( plik, linia); 
std::istringstream daneLinii(linia);
daneLinii >> liczba >> slowo >> znak;
0

najprościej (ale nie optymalnie):

string smiec,data,godzina;
getline(plik,smiec,')');
getline(plik,data,' ');
getline(plik,godzina,' ');
getline(plik,smiec);
0

Poradzilem sobie z tamtym problemem w inny sposob mianowicie:
fstream plik2("C:\Documents and Settings\mikolaj\Pulpit\inc.txt",ios::in);

for(i=0;i<=liczba_wierszy;i++){

getline( plik2, dane[i] );

}
//cout<<dane[0];
for(i=1;i<liczba_wierszy-1;i++)
{cout<<dane[i][10]<<dane[i][11]<<dane[i][12]<<dane[i][13]<<dane[i][14]<<dane[i][15]<<dane[i][16]<<dane[i][17]<<dane[i][18]<<dane[i][19]<<dane[i][20]<<dane[i][21]<<dane[i][22]<<dane[i][23]<<dane[i][24]<<dane[i][25]<<dane[i][26]<<dane[i][27]<<dane[i][51]<<dane[i][52]<<dane[i][53]<<dane[i]

i teraz fajnie wyswietla mi to czego potrzebuje ale jesli chce to zapisac teraz tak zeby te wszystkie potrzebne znaki wrzucało do tablicy tzn zeby połaczyło te pojedyncze znaki np:dane[i][10]+dane[i][11] bo litera i okresla numer linijki te dane ktore wyciagam sa na stalych miejscach 10,11 itp i probowałem w ten sposob:

 linia[i]=dane[i][10]+dane[i][11]+dane[i][12]+dane[i][13]+dane[i][14]+dane[i][15]+dane[i][16]+dane[i][17]+dane[i][18]+dane[i][19]+dane[i][20]+dane[i][21]+dane[i][22]+dane[i][23]+dane[i][24]+dane[i][25]+dane[i][26]+dane[i][27]+dane[i][51]+dane[i][52]+dane[i][53]+dane[i][54];
[54]<<endl;
cout<<linia[i];
}    

i program rusza ale nie wyswietla tego co powinien
wydaje mi sie ze chodzi tu o wielowymiarowosc tablicy ale moge sie mylic;) dlatego prosze o pomoc :)

0

A regexy?

0

linia[i]=dane[i];
linia[i].erase(28,51-28);
linia[i].erase(0,10-0);
cout<<linia[i];

0

dzieki wielkie erase doskonale sie sprawdza :) a jeszcze mam pytanko jak sprawdzic czy w tablicy gdzie sa wyrazy i liczby znajduje sie dane slowo?
np: tab[1]="ala ma kota 11 kot jest zly";
i jesli w tablicy wystepuje slowo kot to ma wywalic mi te trzy jedynki ?

0
#include <pcrecpp.h>
#include <iostream>

const char *tekst = "00000001)14/06/07 20:55:01 001001I|--/--/-/---|=4:2199=A4400 Version : R6.0.1-f1.603-1-c-pl-c6s2    ";

int main()
{
  int dzien,miesiac,rok,godzina,minuta,sekunda;
  pcrecpp::RE re = "[^\\)]*\\)(\\d+)/(\\d+)/(\\d+)\\s+(\\d+):(\\d+):(\\d+).*";
  if (re.FullMatch(tekst,&dzien,&miesiac,&rok,&godzina,&minuta,&sekunda))
  {
     rok += 2000; // dwucyfrowy rok? WTF!
     std::cout<< "data: " << dzien << '-' << miesiac << '-' << rok << std::endl;
     std::cout<< "czas: " << godzina << '.' << minuta << '.' << sekunda << std::endl;
  }
}

gxx pcretest3.cpp -lpcrecpp -lpcre -o pcretest3.exe

0

ostatni problem ;)

for(j=0;j<=liczba_lini;j++)
{ 
                           
opis2[j].length();
w=opis2[j].length();
opis2[j].erase(5,w-5);
tb1[j].ID=opis2[j];



}

Wszystkie petle sa wedlug tego samego schematu a po tej program sie wylacza nawet getch nie pomaga ktos moze wie jaka moze byc przyczyna?

1 użytkowników online, w tym zalogowanych: 0, gości: 1