Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's tools.

 

 

 

 

 

(C++) Sloggi

 

Technical facts

 

 

 

 

 

 

./ToolSloggi/Sloggi.cpp

 

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Stringmatcher.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                 Application->Title = "Sloggi - The Automated Ansistring-matcher";
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}
//---------------------------------------------------------------------------

 

 

 

 

 

./ToolSloggi/Stringmatcher.h

 

//---------------------------------------------------------------------------

#ifndef StringmatcherH
#define StringmatcherH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
#include <jpeg.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
        TOpenDialog *OpenDialog1;
        TOpenDialog *OpenDialog2;
        TSaveDialog *SaveDialog1;
        TMemo *OpenMemo1;
        TMemo *OpenMemo2;
        TPanel *OpenPanel1;
        TPanel *OpenPanel2;
        TButton *OpenButton1;
        TButton *OpenButton2;
        TPanel *MatchPanel;
        TRadioButton *RadioButton1;
        TRadioButton *RadioButton2;
        TRadioButton *RadioButton3;
        TRadioButton *RadioButton4;
        TButton *MatchButton;
        TPanel *SavePanel;
        TMemo *SaveMemo;
        TButton *SaveButton;
        TImage *Image1;
        TButton *ToSaveButton1;
        TButton *ToSaveButton2;
        TButton *CombineButton1;
        TButton *CombineButton2;
        TButton *DubbelButton1;
        TButton *DubbelButton2;
        TLabel *Label1;
        TLabel *Label2;
        TLabel *Label3;
        TPanel *AdvancedPanel;
        TButton *HideButton;
        TLabel *Label4;
        TLabel *Label5;
        TButton *DetermineButton;
        TCheckBox *DifferentBox;
        TEdit *ValueField;
        TLabel *AnsiPosLabel;
        TLabel *Label6;
        void __fastcall OpenButton1Click(TObject *Sender);
        void __fastcall OpenButton2Click(TObject *Sender);
        void __fastcall OpenDialog1CanClose(TObject *Sender,
          bool &CanClose);
        void __fastcall OpenDialog2CanClose(TObject *Sender,
          bool &CanClose);
        void __fastcall SaveButtonClick(TObject *Sender);
        void __fastcall SaveDialog1CanClose(TObject *Sender,
          bool &CanClose);
        void __fastcall MatchButtonClick(TObject *Sender);
        void __fastcall ToSaveButton1Click(TObject *Sender);
        void __fastcall ToSaveButton2Click(TObject *Sender);
        void __fastcall CombineButton1Click(TObject *Sender);
        void __fastcall CombineButton2Click(TObject *Sender);
        void __fastcall DubbelButton1Click(TObject *Sender);
        void __fastcall DubbelButton2Click(TObject *Sender);
        void __fastcall Image1Click(TObject *Sender);
        void __fastcall HideButtonClick(TObject *Sender);
        void __fastcall DetermineButtonClick(TObject *Sender);
private: // User declarations
public: // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

 

 

 

 

 

./ToolSloggi/Stringmatcher.cpp

 

//---------------------------------------------------------------------------

#include <vcl.h>
#include <string>
#pragma hdrstop

#include "Stringmatcher.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenButton1Click(TObject *Sender)
{
OpenDialog1->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenButton2Click(TObject *Sender)
{
OpenDialog2->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenDialog1CanClose(TObject *Sender,
      bool &CanClose)
{
OpenMemo1->Clear();
OpenMemo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::OpenDialog2CanClose(TObject *Sender,
      bool &CanClose)
{
OpenMemo2->Clear();
OpenMemo2->Lines->LoadFromFile(OpenDialog2->FileName);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SaveButtonClick(TObject *Sender)
{
SaveDialog1->Execute();
}
//---------------------------------------------------------------------------


void __fastcall TForm1::SaveDialog1CanClose(TObject *Sender,
      bool &CanClose)
{
//Bij sluiten savedialog, opslaan met bestandsnaam:

AnsiString naambestand;
naambestand = ChangeFileExt(SaveDialog1->FileName,".csv");
SaveMemo->Lines->SaveToFile(naambestand);
ShowMessage("Bestand opgeslagen als "+naambestand);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MatchButtonClick(TObject *Sender)
{
//SaveMemo wissen
SaveMemo->Clear();

int Wat;
if (RadioButton1->Checked==true) {Wat = 1;}
if (RadioButton2->Checked==true) {Wat = 2;}
if (RadioButton3->Checked==true) {Wat = 3;}
if (RadioButton4->Checked==true) {Wat = 4;}
//if (RadioButton5->Checked==true) {Wat = 5;}
//if (RadioButton6->Checked==true) {Wat = 6;}

//Eerst uitvinden op welke positie de eerste puntkomma staat...
//En daarbij naar de tweede regel kijken

int Positie = OpenMemo1->Lines->Strings[1].AnsiPos(";");

if (DifferentBox->Checked==true)
        {
        Positie=ValueField->Text.ToIntDef(0);
        }

//Ingeval Wat = 3 of 4 moet hij gegevens uit het savememo weggooien. Deze moeten eerst geladen worden:
switch(Wat)
        {
        case 3:
        SaveMemo->Lines=OpenMemo2->Lines;
        break;
        case 4:
        SaveMemo->Lines=OpenMemo1->Lines;
        break;
        }



//Positie bevat nu de eerste "positie van ;
//In een dubbele FOR-loop gaat hij beide vergelijken:


int max1 = OpenMemo1->Lines->Count;
int max2 = OpenMemo2->Lines->Count;

AnsiString String1;
AnsiString String2;

for (int tel1 = 0; tel1<max1 ; tel1++)
        {
        String1 = OpenMemo1->Lines->Strings[tel1].SubString(1,Positie-1);
        for (int tel2 = 0; tel2<max2 ; tel2++)
                {
                        //De ruimte voor Positie worden de te vergelijken substrings
                        String2 = OpenMemo2->Lines->Strings[tel2].SubString(1,Positie-1);



                        //Dan de 6 mogelijkheden:
                        switch(Wat)
                                {
                                case 1:
                                //Eerste is gegevens rechterlijst wissen als niet in linkerlijst
                                if(String1==String2)
                                        {
                                        SaveMemo->Lines->Add(OpenMemo2->Lines->Strings[tel2]);
                                        }
                                break;
                                case 2:
                                //Tweede is gegevens linkerlijst wissen als niet in rechterlijst
                                if(String1==String2)
                                        {
                                        SaveMemo->Lines->Add(OpenMemo1->Lines->Strings[tel1]);
                                        }
                                break;
                                case 3:
                                case 4:
                                //Derde en vierde is gegevens wissen die ook in andere lijst staan
                                //daarvoor het hele bestand doorzoeken, omdat er immers regels gewist worden
                                if(String1==String2)
                                {
                                        for (int tel3 = 0; tel3<SaveMemo->Lines->Count; tel3++)
                                                {
                                                if (SaveMemo->Lines->Strings[tel3].SubString(1,Positie-1)==String2)
                                                        {
                                                        SaveMemo->Lines->Delete(tel3);
                                                        }
                                                }//end tel3-forloop
                                        }
                                break; //end case 3 en 4
                                }//end switch(wat)

                }//end forloop tel2
        }//end forloop tel1

}
//---------------------------------------------------------------------------

void __fastcall TForm1::ToSaveButton1Click(TObject *Sender)
{
//Zet de gegevens uit openmemo1 naar savememo
SaveMemo->Lines=OpenMemo1->Lines;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ToSaveButton2Click(TObject *Sender)
{
//Zet de gegevens uit openmemo2 naar savememo
SaveMemo->Lines=OpenMemo2->Lines;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CombineButton1Click(TObject *Sender)
{
//Voegt gegevens uit andere lijst achter gegevens in deze lijst.
//Via dubbele For-loop:
int Positie = OpenMemo1->Lines->Strings[1].AnsiPos(";");

if (DifferentBox->Checked==true)
        {
        Positie=ValueField->Text.ToIntDef(0);
        }

int max1 = OpenMemo1->Lines->Count;
int max2 = OpenMemo2->Lines->Count;

AnsiString String1;
AnsiString String2;

SaveMemo->Clear();

//Dubbele forloop
for (int tel1 = 0; tel1<max1 ; tel1++)
        {
        //Default is regels toevoegen uit eigen memo
        String1 = OpenMemo1->Lines->Strings[tel1].SubString(1,Positie-1);
        AnsiString Nieuw = OpenMemo1->Lines->Strings[tel1];

        //Tenzij ook in ander memo, dan combineren.
        for (int tel2 = 0; tel2<max2 ; tel2++)
                {

                        String2 = OpenMemo2->Lines->Strings[tel2].SubString(1,Positie-1);


                        if (String1==String2)
                                {
                                Nieuw = OpenMemo1->Lines->Strings[tel1]+";"+OpenMemo2->Lines->Strings[tel2];
                                }

                } //end for2
        SaveMemo->Lines->Add(Nieuw);
        } //end for1


OpenMemo1->Clear();
OpenMemo1->Lines=SaveMemo->Lines;
SaveMemo->Clear();

}
//---------------------------------------------------------------------------

void __fastcall TForm1::CombineButton2Click(TObject *Sender)
{
//Voegt gegevens uit andere lijst achter gegevens in deze lijst.
//Via dubbele For-loop:
int Positie = OpenMemo1->Lines->Strings[1].AnsiPos(";");

if (DifferentBox->Checked==true)
        {
        Positie=ValueField->Text.ToIntDef(0);
        }

int max1 = OpenMemo1->Lines->Count;
int max2 = OpenMemo2->Lines->Count;

AnsiString String1;
AnsiString String2;

SaveMemo->Clear();

//Dubbele forloop
for (int tel2 = 0; tel2<max2 ; tel2++)
        {
        //Default is regels toevoegen uit eigen memo
        String2 = OpenMemo2->Lines->Strings[tel2].SubString(1,Positie-1);
        AnsiString Nieuw = OpenMemo2->Lines->Strings[tel2];

        //Tenzij ook in ander memo, dan combineren.
        for (int tel1 = 0; tel1<max1 ; tel1++)
                {

                        String1 = OpenMemo1->Lines->Strings[tel1].SubString(1,Positie-1);


                        if (String1==String2)
                                {
                                Nieuw = OpenMemo2->Lines->Strings[tel2]+";"+OpenMemo1->Lines->Strings[tel1];
                                }

                } //end for2
        SaveMemo->Lines->Add(Nieuw);
        } //end for1
OpenMemo2->Clear();
OpenMemo2->Lines=SaveMemo->Lines;
SaveMemo->Clear();


}
//---------------------------------------------------------------------------

void __fastcall TForm1::DubbelButton1Click(TObject *Sender)
{
//Verwijdert dubbelen uit deze lijst
int Positie = OpenMemo1->Lines->Strings[1].AnsiPos(";");

if (DifferentBox->Checked==true)
        {
        Positie=ValueField->Text.ToIntDef(0);
        }

int max1 = OpenMemo1->Lines->Count;
AnsiString String1;
AnsiString String2;

for (int tel1=0;tel1<max1;tel1++)
        {
        String1 = OpenMemo1->Lines->Strings[tel1].SubString(1,Positie-1);
        for (int tel2=0;tel2<max1;tel2++)
                {
                String2 = OpenMemo1->Lines->Strings[tel2].SubString(1,Positie-1);
                if (tel1!=tel2)
                        {
                        if (String1==String2)
                                {
                                OpenMemo1->Lines->Delete(tel2);
                                }
                        }
                }
        }

}
//---------------------------------------------------------------------------

void __fastcall TForm1::DubbelButton2Click(TObject *Sender)
{
//Verwijdert dubbelen uit deze lijst
int Positie = OpenMemo2->Lines->Strings[1].AnsiPos(";");

if (DifferentBox->Checked==true)
        {
        Positie=ValueField->Text.ToIntDef(0);
        }

int max1 = OpenMemo2->Lines->Count;
AnsiString String1;
AnsiString String2;

for (int tel1=0;tel1<max1;tel1++)
        {
        String1 = OpenMemo2->Lines->Strings[tel1].SubString(1,Positie-1);
        for (int tel2=0;tel2<max1;tel2++)
                {
                String2 = OpenMemo2->Lines->Strings[tel2].SubString(1,Positie-1);
                if (tel1!=tel2)
                        {
                        if (String1==String2)
                                {
                                OpenMemo2->Lines->Delete(tel2);
                                }
                        }
                }
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1Click(TObject *Sender)
{
//geavanceerd menu tonen
AdvancedPanel->Show();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::HideButtonClick(TObject *Sender)
{
AdvancedPanel->Hide();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::DetermineButtonClick(TObject *Sender)
{
int Positie = OpenMemo1->Lines->Strings[1].AnsiPos(";");
String Joost=Positie;

AnsiPosLabel->Caption="De AnsiPos is "+Joost;
AnsiPosLabel->Show();
}
//---------------------------------------------------------------------------

 

 

 

 

 

Go back to Richel Bilderbeek's tools.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict