Przerabianie programu z C++ na Builder C++

0

Witajcie :)
Wyznaczyłem sobie takie zadanie, otóż muszę przerobić program, aby działał jak dotychczas lecz w środowisku C++ Buildera, a więc bardziej graficznym?
Do was mam kilka pytań, które postaram się zadać na bieżąco w czasie przepisywania programu.

Pierwsze pytanie, jak zrobić daną operację dla każdej linijki wczytanej do komponentu Memo (w c++ robiłem to za pomocą pętli, w Builderze nie wiem jak odnieść się do danej linijki po kolei).

Pomożecie ?

0

Builder - słaby wybór, ale jak już musisz, to jeśli rozsądnie miałeś interface zrobiony, to wczytanie do memo powinno skończyc się na załadowaniu zwroconych przez funkcję danych do komponentu memo.

0

Co masz dokładnie na myśli ?

0

Nie mam pod ręką manuala, ale jeśli masz np funkcję która z Twojego interface'u zwraca wczytane dane do wyświetlenia w memo, to dajesz:
mojememo->lines = naszobjekt.danedlamemo();

Nie znam Twojego programu i jak napisałem, nie mam pod ręką dokumentacji od Buildera (a dawno go nie używałem, bo w zasadzie, nie ma sensu), żeby sprawdzić jakie metody ma TStrings Ale ogólnie dobrze stworzony interface pozwala podpiąć w prosty sposób do dowolnego gui dane, które mają być prezentowane/obrabiane.

0

OK. To może polecisz jakiś inny program ? Delphi ? coś innego ?

0

Kolejne pytanie. Otóż zrobiłem program, który wczytuje z pliku csv dane oddzielone przecinkiem.
Jak dodać filtrowanie tak, aby po wpisaniu danego ciągu znaków oraz zaznaczeniu po czym ma filtrować program automatycznie wczytał tylko rekordy zawierające owy ciąg znaków???

Możecie mi pomóc?

EDIT
W sumie już nie ważne.
Przesiadłem się na Delphi 6, gdzie bez problemów działa mi pakiet INDY, który rozwiązuje wszystkie inne problemy, natomiast chwilowo tworzy te, które już rozwiązałem.

Czy mógłby mi ktoś powiedzieć jak powinienem przepisać poniższy kod, aby miało to sens (ręce i nogi). Sorki, że o tyle proszę, ale naprawdę nie wiem z której strony ugryźć tego orzecha ;)

#include <fstream>
#include <iostream>
#include <conio.h>
#include <string.h>
#include <utility>
#include <string>
#include <stdio.h>
#include <time.h>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <Windows.h>
#include <vector>

using namespace std;

//deklaracje wszystkich funkcji występujących w programie
void kom010(const char * PLIK);
void kom013(const char * PLIK);
void kom015(const char * PLIK);
void kom030(const char * PLIK);
void czyszczenie(const char * PLIK);
void menu(string typ, const char * PLIK);
void zapisz();
void zapisz030();
int obliczLoop(int koniec);
string Output_file(string HEADR);
//deklaracje ziennych globalnych występujących w programie
	HANDLE kolor;
	string line;
    string HEADER,HEADR,HDRTPITI,HDRNTRAS,HDRNRECO,HDRCDMAG,HDRMITTE,HDRDTTRX,HDRORTRX;
    string Rekord[99],wynik[99],wynikUZP[99],wynik2[99],UZUPEL,nazwa,typ,odczyt,PLIK,format=".txt";
    int rekordy=0,koniec=0,i=0,linie=0,ile=0,ile2=0,loop=0,loop2=0,uzup=15;
//pobranie aktualnej daty oraz czasu z systemu
pair<string, string> czas()
{
 	string DTBLE, TIME;
	time_t rawtime;
    struct tm * timeinfo;
  	char buffer [80];	
  	time (&rawtime);
  	timeinfo = localtime (&rawtime);
  	strftime (buffer,80,"%Y%m%d%H%M%S",timeinfo);
  	string data(buffer);
  	string nowa;
  	DTBLE=data.substr(2,6);
  	TIME=data.substr(8,6);
  	
    return make_pair(DTBLE, TIME);
}
//deklaracja klasy Moduly, obslugujaca wszystkie zmienne modułowe w programie
class Moduly{
	public:
	string TPITI,SEMOV,CDMAG,MODAM,TELAC,FIL10,CNTER,NRVEN,COLLO,CDCOL,DESC1,DTMER,VINNO,DADOC,PESNE,LPCAR,MZZTR,FIL15;
    string PREIM,FLCEE,ENGIN,LNPRD,CDFOA,SRCAR,PESLO,CDCLM,INSAM,ININD,CAIND,LOIND,PRIND,CDNAZ,CDCL2,DESAS,DOGAN,NRBLE;
    string DESCL,NTORB,CDMA2,RAIND,CDNA2,ASVEF,I2IND,I2IN2,RRQNR,RRQDT,OUTFL,NRIN2,RAIN2,ININ2,CAIN2,LOIN2,PRIN2,CTRNO;
	string NORSD,DTCOC,LPCUS,VECST,MODPV,DORSD,CDVAL,NRPRG,NRFTF,TPASS,DAPCN,FREAM,NRIND,NRBOG,DABOG,CDCLI,ORPTY;
};
//główna funkcja programu
int main(){
	system("cls");
	kolor = GetStdHandle( STD_OUTPUT_HANDLE );
	SetConsoleTextAttribute( kolor, 10 );
  	pair<string, string> bar = czas();
  	cin.clear();
  	
  	cout<<"Plik: ";
  	SetConsoleTextAttribute( kolor, 14 );
  	cin>>odczyt;
  	
  	if(odczyt=="!"){
  		return 0;
	  }
	if(odczyt=="?"){
		informacje();
		getch();
		main();
	}
	else{
		
		PLIK=odczyt+format;
		czyszczenie(PLIK.c_str());
		fstream plik (PLIK.c_str(), ios::in);
  	
  		if(plik.good()==false){
  		
	    	SetConsoleTextAttribute( kolor, 12 );
			system("cls");
			cout<<"Plik: "<<PLIK.c_str()<<" nie istnieje";
			SetConsoleTextAttribute( kolor, 10 );
			getch();
			main();
		}else{
  			do
			{
  				getline(plik, line);
  				linie=linie+1;
			}
			while(!plik.eof());
			plik.close();
	
			typ=line.substr(0,4);
			rekordy=linie-1;
	
			menu(typ, PLIK.c_str());
		}
	}
}
//funkcja "czyszczące" plik wejściowy z nie potrzebnych treści
void czyszczenie(const char * PLIK){
    ifstream input(PLIK);
    string tmp,HEADR;
    vector<string> goodLines;
    fstream wczytaj_HEADR (PLIK, ios::in);
    getline(wczytaj_HEADR, HEADR);
    while (getline(input, tmp))
    {
        if (tmp.substr(0,4)=="010+" || tmp.substr(0,4)=="013+" || tmp.substr(0,4)=="030+")
        {
            goodLines.push_back(tmp);
        }
    }
    input.close();
 
    ofstream output(PLIK);
    output<<HEADR;
    for (size_t i=0;i<goodLines.size();++i)
	{
		output<<endl;
    	output<<goodLines[i];
	}	
}
//funkcja menu, uruchamiająca odpowiednią do komunikatu funkcję
void menu(string typ, const char * PLIK){
	if(typ=="010+"){
		kom010(PLIK);
		obliczLoop(koniec);
		zapisz();
	}
	
	if(typ=="013+"){
		kom013(PLIK);	
		obliczLoop(koniec);
		zapisz();
	}
	
	if(typ=="015+" || typ=="015-"){
		kom015(PLIK);	
		obliczLoop(koniec);
		zapisz();
	}
	
	if(typ=="030+"){
		kom030(PLIK);
		obliczLoop(koniec);
		zapisz030();
	}
}
//funkcja obliczająca ilość znaków do uzupełnienia
int obliczLoop(int koniec){	   
	ile=(int)log10(koniec)+1;
	loop=5-ile;
	
	return loop;
}
//funkcja zapisująca zawartość TYLKO dla komunikatu 030
void zapisz030(){
	pair<string, string> bar = czas();
	fstream plik2 (nazwa.c_str(), ios::out);
	
	plik2<<"HDR"<<HDRTPITI<<UZUPEL;
	for (int i=0;i<loop;i++){
		plik2<<"0";
	}
	
	plik2<<koniec<<"  CAT2W          "<<bar.first<<bar.second<<"\n";
	
    for (int i=0;i<rekordy;i++){
		plik2<<wynik[i];
	}
		
	for (int i=0;i<rekordy;i++){
		plik2<<wynik2[i];
	}
}
//funkcja zapisujące zawartość reszty komunikatów
void zapisz(){
	pair<string, string> bar = czas();
	fstream plik2 (nazwa.c_str(), ios::out);
	
	plik2<<"HDR"<<HDRTPITI<<UZUPEL;
	for (int i=0;i<loop;i++){
		plik2<<"0";
	}
	
	plik2<<koniec<<"  CAT2W          "<<bar.first<<bar.second<<"\n";
	
	for (int i=0;i<rekordy;i++){
		plik2<<wynik[i];
	}
}
//funkcja generująca nazwę pliku wyjściowego
string Output_file(string HEADR)
{
		HDRTPITI=HEADR.substr(3,5);
	    nazwa="CAT"+HDRTPITI+".txt";
	    
	    return nazwa;
}
//funkcja obsługująca komunikat 010
void kom010(const char * PLIK){
	pair<string, string> bar = czas();
	fstream plik3 (PLIK, ios::in);
  	while(!plik3.eof()){
        getline(plik3, HEADR);
    	Output_file(HEADR);
    	
        for (int i=0;i<rekordy;i++){
        	Moduly Modul;
        	getline(plik3, Rekord[i]);
        	Modul.TPITI=Rekord[i].substr(0,3);
        	Modul.SEMOV=Rekord[i].substr(3,1);
        	Modul.CDMAG=Rekord[i].substr(4,2);
        	Modul.MODAM=Rekord[i].substr(6,15);
        	Modul.TELAC=Rekord[i].substr(21,6);
        	Modul.FIL10=Rekord[i].substr(27,13);
        	Modul.CNTER=Rekord[i].substr(40,12);
        	Modul.NRVEN=Rekord[i].substr(52,10);
        	Modul.COLLO=Rekord[i].substr(62,6);
        	Modul.CDCOL=Rekord[i].substr(68,3);
        	Modul.DESC1=Rekord[i].substr(71,15);
        	Modul.VINNO=Rekord[i].substr(92,17);
        	Modul.NRFTF=Rekord[i].substr(115,11);
        	Modul.CDVAL=Rekord[i].substr(126,3);
        	Modul.PREIM=Rekord[i].substr(129,11);
        	Modul.FLCEE=Rekord[i].substr(140,1);
			Modul.ENGIN=Rekord[i].substr(141,18);
			Modul.LNPRD=Rekord[i].substr(159,1);
			Modul.CDFOA=Rekord[i].substr(160,6);
			Modul.SRCAR=Rekord[i].substr(166,1);
			Modul.PESLO=Rekord[i].substr(167,7);
			Modul.CDCLM=Rekord[i].substr(174,3);
			Modul.INSAM=Rekord[i].substr(177,17);
			Modul.FREAM=Rekord[i].substr(194,17);
			Modul.PESNE=Rekord[i].substr(211,7);
			wynik[i]="040"+Modul.SEMOV+Modul.CDMAG+Modul.MODAM+Modul.TELAC+bar.first+"      "+bar.first+Modul.VINNO+Modul.LNPRD+"      \n";
        }
        koniec=rekordy+1;
	}
}
//funkcja obsługująca komunikat 013
void kom013(const char * PLIK){
	pair<string, string> bar = czas();
	fstream plik3 (PLIK, ios::in);
  	while(!plik3.eof()){
       	getline(plik3, HEADR);
    	Output_file(HEADR);
    		
        for (int i=0;i<rekordy;i++){
        	Moduly Modul;
	       	getline(plik3, Rekord[i]);
			Modul.TPITI=Rekord[i].substr(0,3);
			Modul.SEMOV=Rekord[i].substr(3,1);
			Modul.LNPRD=Rekord[i].substr(4,1);
			Modul.MODAM=Rekord[i].substr(5,15);
			Modul.TELAC=Rekord[i].substr(20,6);
			Modul.VINNO=Rekord[i].substr(26,17);
			Modul.DESCL=Rekord[i].substr(43,40);
			Modul.NTORB=Rekord[i].substr(83,1);
			Modul.CDMA2=Rekord[i].substr(84,2);
			Modul.CDCLI=Rekord[i].substr(86,6);
			Modul.NRIND=Rekord[i].substr(92,2);
			Modul.RAIND=Rekord[i].substr(94,35);
			Modul.ININD=Rekord[i].substr(129,35);
			Modul.CAIND=Rekord[i].substr(164,9);
			Modul.LOIND=Rekord[i].substr(173,20);
			Modul.PRIND=Rekord[i].substr(193,2);
			Modul.CDNAZ=Rekord[i].substr(195,3);
			Modul.CDMAG=Rekord[i].substr(198,2);
			Modul.CDCL2=Rekord[i].substr(200,6);
			Modul.NRIN2=Rekord[i].substr(206,2);
			Modul.RAIN2=Rekord[i].substr(208,35);
			Modul.ININ2=Rekord[i].substr(243,35);
			Modul.CAIN2=Rekord[i].substr(278,9);
			Modul.LOIN2=Rekord[i].substr(287,20);
			Modul.PRIN2=Rekord[i].substr(307,2);
			Modul.CDNA2=Rekord[i].substr(309,3);
			Modul.ASVEF=Rekord[i].substr(312,1);
			Modul.I2IND=Rekord[i].substr(313,35);
			Modul.I2IN2=Rekord[i].substr(348,35);
			Modul.RRQNR=Rekord[i].substr(383,7);
			Modul.RRQDT=Rekord[i].substr(390,10);
			Modul.OUTFL=Rekord[i].substr(391,1);
			Modul.CDCOL=Rekord[i].substr(394,3);
			Modul.CDCLM=Rekord[i].substr(397,3);
			wynik[i]="014"+Modul.SEMOV+Modul.LNPRD+Modul.MODAM+Modul.TELAC+Modul.VINNO+bar.first+"        "+Modul.CDMAG+Modul.CDCL2;
        }
        koniec=rekordy+1;
	}
}
//funkcja obsługująca komunikat 030
void kom030(const char * PLIK){
	pair<string, string> bar = czas();
	fstream plik3 (PLIK, ios::in);
  	while(!plik3.eof()){
	    getline(plik3, HEADR);
    	Output_file(HEADR);
    	
        for (int i=0;i<rekordy;i++){
        	Moduly Modul;
	       	getline(plik3, Rekord[i]);
    	   	Modul.TPITI=Rekord[i].substr(0,3);
        	Modul.SEMOV=Rekord[i].substr(3,1);
        	Modul.CDMAG=Rekord[i].substr(4,2);
	       	Modul.MODAM=Rekord[i].substr(6,15);
    	   	Modul.TELAC=Rekord[i].substr(21,6);
        	Modul.DESCL=Rekord[i].substr(27,40);
        	Modul.TPASS=Rekord[i].substr(67,1);
	       	Modul.DESAS=Rekord[i].substr(68,30);
    	   	Modul.VINNO=Rekord[i].substr(98,17);
        	Modul.MZZTR=Rekord[i].substr(115,4);
        	Modul.NTORB=Rekord[i].substr(119,1);
	       	Modul.LNPRD=Rekord[i].substr(120,1);
    	   	Modul.ORPTY=Rekord[i].substr(121,1);
        	Modul.NRPRG=Rekord[i].substr(122,7);
	       	Modul.DAPCN=Rekord[i].substr(129,6);
    	   	Modul.LPCAR=Rekord[i].substr(135,2);
        	Modul.CDCOL=Rekord[i].substr(137,3);
			Modul.CDCLM=Rekord[i].substr(140,3);
			wynik[i]="022"+Modul.SEMOV+Modul.CDMAG+Modul.VINNO+bar.first+Modul.LNPRD+Modul.NRPRG+"\n";
			wynik2[i]="060"+Modul.SEMOV+Modul.CDMAG+Modul.MODAM+Modul.TELAC+bar.first+Modul.DAPCN+"      "+Modul.VINNO+Modul.LNPRD+"                    "+Modul.NRPRG+"\n";
        }
    	koniec=(rekordy*2)+1;
	}
}
//funkcja obsługująca komunikat 015
void kom015(const char * PLIK){
	pair<string, string> bar = czas();
	fstream plik3 (PLIK, ios::in);
  	while(!plik3.eof()){
	    getline(plik3, HEADR);
    	Output_file(HEADR);
    	
        for (int i=0;i<rekordy;i++){
        	Moduly Modul;
	       	getline(plik3, Rekord[i]);
    	   	Modul.TPITI=Rekord[i].substr(0,3);
        	Modul.SEMOV=Rekord[i].substr(3,1);
        	Modul.CDMAG=Rekord[i].substr(4,2);
	       	Modul.MODAM=Rekord[i].substr(6,15);
    	   	Modul.TELAC=Rekord[i].substr(21,6);
			Modul.FIL15=Rekord[i].substr(27,13);
			Modul.CNTER=Rekord[i].substr(40,12);
			Modul.NRVEN=Rekord[i].substr(52,10);
			Modul.COLLO=Rekord[i].substr(62,6);
			Modul.CDCOL=Rekord[i].substr(68,3);
			Modul.DESC1=Rekord[i].substr(71,15);
			Modul.ENGIN=Rekord[i].substr(86,18);
			Modul.LNPRD=Rekord[i].substr(104,1);
			Modul.VINNO=Rekord[i].substr(105,17);
			//wynik[i]="040"+SEMOV[i]+CDMAG[i]+MODAM[i]+TELAC[i]+DTBLE[i]+NRBLE[i]+DTARR[i]+VINNO[i]+LNPRD[i]+CTRNO[i]+"\n";
			wynik[i]="040"+Modul.SEMOV+Modul.CDMAG+Modul.MODAM+Modul.TELAC+bar.first+Modul.NRBLE+bar.first+Modul.LNPRD+Modul.CTRNO+"\n";
        }
    	koniec=(rekordy*2)+1;
	}
}

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