Pliki i lokalizacja:
KOD cpp: UKRYJ
char *path_Before="C:\\Program Files\\Embarcadero\\Studio\\18.0\\Path-Before-Install.txt";
char *path_After="C:\\Program Files\\Embarcadero\\Studio\\18.0\\Path-After-Install.txt";
char *path_After="C:\\Program Files\\Embarcadero\\Studio\\18.0\\Path-After-Install.txt";
Kłania się biblioteka fstream do otwierania plików, ale z racji tego, że średnio mi poszło jej użycie (krzaki i komunikaty o braku dostępu), poszedłem na łatwiznę i kulturalnie otwarłem to komponentami Memo.
KOD cpp: UKRYJ
Memo1->Lines->LoadFromFile(path_Before);
Memo2->Lines->LoadFromFile(path_After);
Memo2->Lines->LoadFromFile(path_After);
Otwarło się znakomicie, na 2 memo kilkulinijkowy obszar z tekstami.
Pozostało przypisać to do zmiennych tekstowych. Zdecydowałem się na dynamiczne AnsiString gdzie rozmiar wytyczy ilość linijek w Memo.
KOD cpp: UKRYJ
int count_Memo1,count_Memo2;
count_Memo1=Memo1->Lines->Count;
count_Memo2=Memo2->Lines->Count;
AnsiString *buff_Before;
AnsiString *buff_After;
AnsiString *sum_Result;
buff_Before=new AnsiString[count_Memo1];
buff_After=new AnsiString[count_Memo2];
sum_Result=new AnsiString[count_Memo1+count_Memo2];
count_Memo1=Memo1->Lines->Count;
count_Memo2=Memo2->Lines->Count;
AnsiString *buff_Before;
AnsiString *buff_After;
AnsiString *sum_Result;
buff_Before=new AnsiString[count_Memo1];
buff_After=new AnsiString[count_Memo2];
sum_Result=new AnsiString[count_Memo1+count_Memo2];
Teraz proste przypisanie linijek Memo do tablic tekstowych:
KOD cpp: UKRYJ
for(i=0;i<count_Memo1;i++)
{
buff_Before[i]=Memo1->Lines->Strings[i];
}
for(i=0;i<count_Memo2;i++)
{
buff_After[i]=Memo2->Lines->Strings[i];
}
for(i=0;i<count_Memo1;i++)
sum_Result[i]=buff_Before[i];
for(i=0;i<count_Memo2;i++)
sum_Result[count_Memo1+i]=buff_After[i];
{
buff_Before[i]=Memo1->Lines->Strings[i];
}
for(i=0;i<count_Memo2;i++)
{
buff_After[i]=Memo2->Lines->Strings[i];
}
for(i=0;i<count_Memo1;i++)
sum_Result[i]=buff_Before[i];
for(i=0;i<count_Memo2;i++)
sum_Result[count_Memo1+i]=buff_After[i];
I chyba nie takie proste do końca, bo dołączając 3 Memo by uzyskać sumę z tekstów:
KOD cpp: UKRYJ
for(i=0;i<count_Memo1+count_Memo2;i++)
{
Memo3->Lines->Strings[i]=sum_Result[i];
}
{
Memo3->Lines->Strings[i]=sum_Result[i];
}
Pokazuje mi raptem 2 linijki z Memo1.
Na wszelki wypadek sprawdziłem wartości liczbowe z ilości linijek, które są jednocześnie wielkościami tablica zmiennych AnsiString.
KOD cpp: UKRYJ
int count_Memo3=Memo3->Lines->Count;
Edit1->Text=IntToStr(count_Memo1);
Edit2->Text=IntToStr(count_Memo2);
Edit3->Text=IntToStr(count_Memo3);
Edit1->Text=IntToStr(count_Memo1);
Edit2->Text=IntToStr(count_Memo2);
Edit3->Text=IntToStr(count_Memo3);
I wszystko się zgadza, mają dokładnie tyle jaka jest liczba liniek w wyświetlanych komponentach Memo.
Wszystko wskazuje, że te przepisania są chyba błędne:
KOD cpp: UKRYJ
for(i=0;i<count_Memo1;i++)
{
buff_Before[i]=Memo1->Lines->Strings[i];
}
for(i=0;i<count_Memo2;i++)
{
buff_After[i]=Memo2->Lines->Strings[i];
}
{
buff_Before[i]=Memo1->Lines->Strings[i];
}
for(i=0;i<count_Memo2;i++)
{
buff_After[i]=Memo2->Lines->Strings[i];
}
Ma ktoś jakiś pomysł co tu może być zle? Na kompilatorze nie ma nawet warningów
Oczywiście usunięcie dynamicznych też się odbyło:
KOD cpp: UKRYJ
delete sum_Result;
delete buff_After;
delete buff_Before;
delete buff_After;
delete buff_Before;
Spróbowałem jeszcze czegoś takiego:
KOD cpp: UKRYJ
for(i=0;i<count_Memo2;i++)
{
Memo3->Lines->Strings[i]=buff_After[i];
}
{
Memo3->Lines->Strings[i]=buff_After[i];
}
I ponownie tylko 2 linijki z zakładanych 12;
OK. Więc jest już 100% pewność, że:
KOD cpp: UKRYJ
buff_Before=new AnsiString[count_Memo1];
buff_After=new AnsiString[count_Memo2];
sum_Result=new AnsiString[count_Memo1+count_Memo2];
for(i=0;i<count_Memo1;i++)
{
buff_Before[i]=Memo1->Lines->Strings[i];
}
for(i=0;i<count_Memo2;i++)
{
buff_After[i]=Memo2->Lines->Strings[i];
}
buff_After=new AnsiString[count_Memo2];
sum_Result=new AnsiString[count_Memo1+count_Memo2];
for(i=0;i<count_Memo1;i++)
{
buff_Before[i]=Memo1->Lines->Strings[i];
}
for(i=0;i<count_Memo2;i++)
{
buff_After[i]=Memo2->Lines->Strings[i];
}
takie przypisanie, mimo, że tolerowane przez kompilator, jednak ma jakiś inny, dziwaczny rezultat.
Podejrzewam, że kłóci się tablica AnsiStringów z przypisaniem Memo->Lines->Strings[ile_tam];