CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - RichText i wczytywanie zmiennych wraz z plikiem tekstowym

RichText i wczytywanie zmiennych wraz z plikiem tekstowym

dział ogólny

RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Antonowski » piątek, 6 maja 2011, 21:49

Mam problem z ustaleniem sposobu zapisywania zmiennych w pliku tekstowym, który chcę wczytać do obiektu RichEdit. Nie działa sposób z wykorzystaniem " " czy też ' " " '. Chciałbym np., aby poniższa instrukcja wyświetliła odpowiednią zmienną w RichText:
Kod: Zaznacz cały
Wpisana liczba to " +Edit10->Text + ".

Dodam tylko, że wszystko ładnie działa jeśli kod w takiej postaci wkleję bezpośrednio do programu:
KOD cpp:     UKRYJ  
RichEdit1->Text="Wpisana liczba to " +Edit10->Text + ". ";
 
Avatar użytkownika
Antonowski
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): czwartek, 21 października 2010, 17:56
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3 x86 (dla kompilatora)
Kompilator: Borland Developer Studio 2006
SKYPE: vekh666
Gadu Gadu: 2743544
    Windows XPChrome

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Corvis » piątek, 6 maja 2011, 22:18

Wpierw ustalmy czy się rozumiemy :-)

Chcesz do pliku zapisać:

"Wpisana liczba to " +Edit10->Text + ". ";

Potem wczytać to z pliku i mieć wynik:

"Wpisana liczba to " +(TUTAJ MA SIĘ PODSTAWIĆ WARTOŚĆ Z EDIT10 który jest w programie) + ". ";

O to chodzi ??

Bo jeżeli tak to nie mam pojęcia po co to robić :p i co chcesz osiągnać ??
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Cyfrowy Baron » sobota, 7 maja 2011, 09:35

Ja nie rozumiem... :roll:

Antonowski napisał(a):Nie działa sposób z wykorzystaniem " " czy też ' " " '.


Co to ma wspólnego z zapisywaniem czy odczytywaniem danych do/z pliku??



Na początek ustalmy:

  1. Jak zapisujesz dane do pliku?
  2. Czy dane zapisywane do tego pliku są do niego dopisywane, czy zastępują znajdujące się tam dane.
  3. Jak wczytujesz dane z pliku?
  4. Czy wczytujesz cała zawartość pliku, czy tylko wybrany fragment?

Więcej kodu!
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Antonowski » sobota, 7 maja 2011, 10:11

Cyfrowy Baron napisał(a):Co to ma wspólnego z zapisywaniem czy odczytywaniem danych do/z pliku??


To ma wspólnego, że jeśli istnieje jakiś sposób zaznaczenia, że wczytywana jest zmienna to podejrzewam, że z wykorzystaniem symboli "" właśnie - tak jak ma to miejsce np. w poleceniach SQL, gdzie wtrąca się zmienne czy też odnośniki do obiektów pomiędzy "".
Po drugie to nie jest zapis do pliku tylko jego wczytywanie, a potrzebne jest mi do tego, aby ktoś kto nie jest programistą mógł bez większych przeszkód edytować plik *.txt z zawartością komunikatu i wstawić własny tekst na stałe - bo jestem świadom tego, że może dokonywać edycji w RichText... Tyle, tylko, że wczytywana zawartość pliku tekstowego jest cała traktowana jako normalny zwykły tekst - nie można uzyskać
Kod: Zaznacz cały
Wpisana liczba to 22.
zamiast tego ciągle uzyskuję
Kod: Zaznacz cały
Wpisana liczba to " +Edit10->Text + ".
Pierwszy raz kombinuję z wczytywanie danych z pliku tekstowego (wszystko opierałem o bazę danych), więc nie bardzo wiem nawet czy jest możliwość osiągnięcia czegoś takiego...
No chyba, że widzicie inne rozwiązanie tej kwestii ;-)
Ostatnio edytowano sobota, 7 maja 2011, 10:44 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Nie cytujemy całych postów!
Avatar użytkownika
Antonowski
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): czwartek, 21 października 2010, 17:56
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3 x86 (dla kompilatora)
Kompilator: Borland Developer Studio 2006
SKYPE: vekh666
Gadu Gadu: 2743544
    Windows 7Firefox

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Cyfrowy Baron » sobota, 7 maja 2011, 10:58

Nie da się wyselekcjonować w pliku tekstowym zmiennej. Plik tekstowy zawiera tylko tekst i oznaczanie tego cudzysłowem nic nie da o ile nie zaimplementujesz w programie parsowania pliku tekstowego tak by odróżniał jedno od drugiego. Do TRichEdit, TMemo, TListBox, TComboBox, itp. służy klasa TStrings, a konkretnie jej metoda LoadFromFile:
KOD cpp:     UKRYJ  
RichEdit1->Lines->LoadFromFile("nazwa pliku.txt");


Jeżeli w pliku tekstowym, będziesz miał taką zawartość:

KOD text:     UKRYJ  
Wpisana liczba to 22.


To po wczytaniu do RichEdit wyświetli się dokładnie to samo.

Antonowski napisał(a):To ma wspólnego, że jeśli istnieje jakiś sposób zaznaczenia, że wczytywana jest zmienna to podejrzewam, że z wykorzystaniem symboli "" właśnie - tak jak ma to miejsce np. w poleceniach SQL, gdzie wtrąca się zmienne czy też odnośniki do obiektów pomiędzy "".


Bzdura! Nie porównuj tego z bazą danych, gdyż baza danych ma mechanizm parsujący i własną składnię, gdzie dane muszą być ułożone w ściśle określony sposób. Nie da się tego zrobić tak jak w bazie danych, gdyż RichEdit, ani żaden inny obiekt nie jest wyposażony w mechanizmy takie jak w bazie danych.
Baza danych to swego rodzaju program, który został zaprogramowany do konkretnych celów. Użytkownik bazy danych nie musi wiedzieć jak działa jej mechanizm, lecz wystarczy, że wie jak tego mechanizmu używać. Jest to dużym ułatwieniem, gdyż nie musisz tworzyć programu bazodanowego od podstaw - korzystasz z gotowego programu. Zauważ, że by program bazodanowy działał w systemie musi być zainstalowany engine tej bazy danych.

Żaden ze standardowo dostępnych komponentów obsługujących tekst w środowisku C++Builder nie dzieli tekstu na łańcuch znaków i zmienne. Może to robić, ale trzeba stworzyć odpowiedni mechanizm, czyli zaprogramować aplikację do takich celów. TRichEdit wydaje się do tego najmniej odpowiedni, gdyż obsługuje formatowanie Rich Text Format, czyli składnia tego formatowania jest podobna do składni TeX, to pozwala tworzyć dokumenty z definicją czcionki, wielkością czcionki, kolorem i... to w zasadzie wszystko. Podsumowując TRichEdit potrafi tylko tyle co standardowy program WordPad systemu Windows, a nawet trochę mniej, gdyż WordPad wykorzystuje rozszerzoną wersje tego komponentu pod nazwą TRichView, ale to jest już biblioteka komercyjna. Jeżeli chcesz wiedzieć, czy możesz zrealizować swoje zadanie z wykorzystaniem TRichEdit, to sprawdź, czy da się to samo zrobić w programie WordPad.



Opisz swój problem na przykładzie, bo wciąż nie do końca rozumiem co chcesz osiągnąć.

Masz plik tekstowy, który użytkownik może edytować. Podaj całkowitą przykładową zawartość tego pliku. Następnie pokaż co chcesz by pojawiło się w RichEdit, po wczytaniu danych z tegoż pliku. Potrzebne jest to, by zrozumieć jak jest różnica między tym co znajduje się w pliku, a tym co ma się wyświetlać w RichEdit.



Możliwe, że potrzebujesz czegoś w rodzaju plików *.INI, przy czym rozszerzenie takich plików może być dowolne.
O plikach *.ini możesz poczytać w serwisie Cyfrowy Baron, dział: teoria -> pliki ini.
Pomocna będzie również porada z działu: porady -> TStringList -> Tworzenie listy zawierającej nazwy i wartości przypisane do nazw.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Antonowski » sobota, 7 maja 2011, 14:06

Cyfrowy Baron napisał(a):[j]Bzdura! Nie porównuj tego z bazą danych, gdyż baza danych ma mechanizm parsujący i własną składnię, gdzie dane muszą być ułożone w ściśle określony sposób. Nie da się tego zrobić tak jak w bazie danych, gdyż RichEdit, ani żaden inny obiekt nie jest wyposażony w mechanizmy takie jak w bazie danych.
Baza danych to swego rodzaju program, który został zaprogramowany do konkretnych celów. Użytkownik bazy danych nie musi wiedzieć jak działa jej mechanizm, lecz wystarczy, że wie jak tego mechanizmu używać. Jest to dużym ułatwieniem, gdyż nie musisz tworzyć programu bazodanowego od podstaw - korzystasz z gotowego programu. Zauważ, że by program bazodanowy działał w systemie musi być zainstalowany engine tej bazy danych.

No właśnie o taką informację mi chodziło. Nie miałem pojęcia dlaczego SQL sobie radzi a RichEdit już nie... Teraz już wiem ;-) Ot zalety nauki pt. "róbta co chceta byleby działało" :zawiedziony:

Jeśli chodzi o wynik:
Obrazek

jest to działanie takiego kodu:
KOD cpp:     UKRYJ  
void __fastcall TForm8::Button26Click(TObject *Sender)
{  float x,y,z;
x=(DBGrid1->Fields[5]->Value) * (DataModule1->Taryfikator->FieldValues["Stawka"]);
Edit1->Text=DBGrid1->Fields[4]->Value+60;
Edit34->Text =DBGrid1->Fields[2]->Value;
Edit35->Text = "Przypomnienie o zwrocie książki";
RichEdit1->Text="Szanowny(a) Panie(i),\nuprzejmie informujemy, że wraz z dniem "+Edit1->Text+" \
upłynął termin oddania książki pt. "
+DBGrid1->Fields[3]->Value+".  \
Automatycznie naliczona kara, na dzień dzisiejszy wynosi "
+x+" zł. Prosimy o jak najszybszy zwrot ww. tytułu.\n \
Z poważaniem \nBiblioteka\n__________________________________\nWiadomość została wygenerowana automatycznie przez program mLibris\nProsimy na niego nie odpowiadać "
;
}
Program piszę na zaliczenie przedmiotu. Jako, że lubię się męczyć z pierdołami, które wymyśle chciałem zrobić tak, żeby - w tym przypadku - treść e-maila "automatycznego" była edytowalna przez użytkownika. Tylko, że z tego co teraz przeczytałem nie da się tego wykonać w taki sposób... :(
Avatar użytkownika
Antonowski
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): czwartek, 21 października 2010, 17:56
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3 x86 (dla kompilatora)
Kompilator: Borland Developer Studio 2006
SKYPE: vekh666
Gadu Gadu: 2743544
    Windows XPChrome

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Cyfrowy Baron » sobota, 7 maja 2011, 16:02

Wciąż pozostaje niejasne co znajduje się we wspomnianym przez Ciebie pliku tekstowym i gdzie dokładnie ma być wczytywana zawartość tego pliku... :roll:
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez polymorphism » sobota, 7 maja 2011, 17:22

Antonowskiemu chodzi chyba o coś takiego jak szablon emaila, który może sobie edytować. Na przykład coś takiego:
KOD text:     UKRYJ  
Szanowny(a) Panie(i),
uprzejmie informujemy, że wraz z dniem ##data## upłynął termin oddania książki pt. ##tytul##.
Automatycznie naliczona kara, na dzień dzisiejszy wynosi ##kara## zł. Prosimy o jak najszybszy zwrot ww. tytułu.
Z poważaniem
Biblioteka
__________________________________
Wiadomość została wygenerowana automatycznie przez program mLibris
Prosimy na niego nie odpowiadać

Przed wysłaniem maila program parsuje taki szablon, gdzie pod wszystkie zmienne - w tym przykładzie pomiędzy ## - wstawia konkretne wartości. Dzięki temu zwykły użytkownik bez znajomości programowania może sobie dowolnie edytować treść.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Cyfrowy Baron » sobota, 7 maja 2011, 18:03

Zakładając, że te znaczniki np. ##data## zawsze nazywają się tak samo, można by je łatwo podmienić:

KOD cpp:     UKRYJ  
String z1 = "##data##";
RichEdi1->Text = StringReplace(RichEdit->Text, z1, Edit1->Text, TReplaceFlags() << rfReplaceAll);


Do tego celu lepiej jednak użyć obiektu typu TMemo, a nie RichEdit.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Antonowski
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Antonowski » poniedziałek, 9 maja 2011, 10:49

Dzięki - działa Twój sposób z podmianą :-) Jesteś wielki 8-)
Avatar użytkownika
Antonowski
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): czwartek, 21 października 2010, 17:56
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3 x86 (dla kompilatora)
Kompilator: Borland Developer Studio 2006
SKYPE: vekh666
Gadu Gadu: 2743544
    Windows XPChrome

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez sebaskow » poniedziałek, 9 maja 2011, 11:37

Witam.

Wydaje mi się że tak prosty temat zbyt mocno komplikujemy.

Ja zrobiłbym to tak:
KOD cpp:     UKRYJ  
/*
    Dlaczego tego nie zrobić w taki sposób:
*/

}
AnsiString tytul = DBGrid1->Fields[3]->Value;
AnsiString kara;

kara = kara.FormatFloat("#0.00", (DBGrid1->Fields[5]->Value) * (DataModule1->Taryfikator->FieldValues["Stawka"]));

RichEdit1->Lines->Clear();
RichEdit1->Lines->Add("Szanowny(a) Panie(i),");
RichEdit1->Lines->Add("uprzejmie informujemy, że wraz z dniem" + Edit1->Text +
                      "upłynął termin oddania książki pt. " + tytul +
                      ".");
RichEdit1->Lines->Add("Automatycznie naliczona kara, na dzień dzisiejszy wynosi " + kara +
                      " zł. Prosimy o jak najszybszy zwrot ww. tytułu.");
RichEdit1->Lines->Add("Z poważaniem");
RichEdit1->Lines->Add(" ");
RichEdit1->Lines->Add("Biblioteka");
RichEdit1->Lines->Add(" ");
RichEdit1->Lines->Add("---------------------------------------------------------------");
RichEdit1->Lines->Add("Wiadomość została wygenerowana automatycznie przez program mLibris");
RichEdit1->Lines->Add("Prosimy na niego nie odpowiadać");


Mam nadzieję że dobrze zrozumiałem idee autora.
Avatar użytkownika
sebaskow
Intelektryk
Intelektryk
 
Posty: 135
Dołączył(a): wtorek, 3 maja 2011, 08:30
Lokalizacja: Katowice
Podziękował : 10
Otrzymał podziękowań: 0
System operacyjny: Windows 10
Kompilator: C++ Builder XE7
Gadu Gadu: 0
    Windows XPChrome

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez polymorphism » poniedziałek, 9 maja 2011, 11:41

Nie zrozumiałeś ;) Przeczytaj jeszcze raz mojego przedostatniego posta.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Antonowski » poniedziałek, 9 maja 2011, 13:46

Problem rozwiązałem w ten sposób - na razie tak jak jest - ew. kosmetykę zostawiam na koniec:
KOD cpp:     UKRYJ  
void __fastcall TForm8::Button26Click(TObject *Sender)
{  float x,y,z; ShortString z1, z2, z3;
x=(DBGrid1->Fields[5]->Value) * (DataModule1->Taryfikator->FieldValues["Stawka"]);
Edit1->Text=DBGrid1->Fields[4]->Value+60;
Edit34->Text =DBGrid1->Fields[2]->Value;
Edit35->Text = "Przypomnienie o nieoddanych pozycjach.";
RichEdit1->Lines->LoadFromFile("./1.txt");
z1 = "Edit1->Text";
z2 = "DBGrid1->Fields[3]->Value";
z3 = "x";
RichEdit1->Text = StringReplace(RichEdit1->Text, z1, Edit1->Text, TReplaceFlags() << rfReplaceAll);
RichEdit1->Text = StringReplace(RichEdit1->Text, z2, DBGrid1->Fields[3]->Value, TReplaceFlags() << rfReplaceAll);
RichEdit1->Text = StringReplace(RichEdit1->Text, z3, x, TReplaceFlags() << rfReplaceAll);
}

I wszystko działa :)
Avatar użytkownika
Antonowski
Bladawiec
Bladawiec
 
Posty: 16
Dołączył(a): czwartek, 21 października 2010, 17:56
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: Windows XP SP3 x86 (dla kompilatora)
Kompilator: Borland Developer Studio 2006
SKYPE: vekh666
Gadu Gadu: 2743544
    Windows XPChrome

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez polymorphism » poniedziałek, 9 maja 2011, 14:17

KOD cpp:     UKRYJ  
z1 = "Edit1->Text";
z2 = "DBGrid1->Fields[3]->Value";
z3 = "x";

:o To już nie mogłeś dać zwięzłych, bardziej opisowych nazw? Przecież za miesiąc bez zaglądania do źródeł nie będziesz wiedział, do czego one się odnoszą i co oznaczają.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: RichText i wczytywanie zmiennych wraz z plikiem tekstowym

Nowy postprzez Cyfrowy Baron » poniedziałek, 9 maja 2011, 15:42

Nie pisz tego kodu tak na kupie, bo zaraz sam się w tym pogubisz!
Spójrz jak wygląda to po uporządkowaniu:

KOD cpp:     UKRYJ  
void __fastcall TForm8::Button26Click(TObject *Sender)
{
  float x, y, z;
  ShortString z1, z2, z3;

  x = (DBGrid1->Fields[5]->Value) * (DataModule1->Taryfikator->FieldValues["Stawka"]);

 Edit1->Text  = DBGrid1->Fields[4]->Value + 60;
 Edit34->Text = DBGrid1->Fields[2]->Value;
 Edit35->Text = "Przypomnienie o nie oddanych pozycjach.";

 RichEdit1->Lines->LoadFromFile( "./1.txt" );

 z1 = "Edit1->Text";
 z2 = "DBGrid1->Fields[3]->Value";
 z3 = "x";

 RichEdit1->Text = StringReplace( RichEdit1->Text, z1, Edit1->Text, TReplaceFlags() << rfReplaceAll );
 RichEdit1->Text = StringReplace( RichEdit1->Text, z2, DBGrid1->Fields[3]->Value, TReplaceFlags() << rfReplaceAll );
 RichEdit1->Text = StringReplace( RichEdit1->Text, z3, x, TReplaceFlags() << rfReplaceAll );
}




KOD cpp:     UKRYJ  
 RichEdit1->Lines->LoadFromFile("./1.txt");


Dlaczego nazwę pliku poprzedziłeś kropką i ukośnikiem? Jeżeli ma to być odwołanie do katalogu o jeden poziom niższego niż katalog programu to niestety nie zadziała. Funkcja LoadFromFile oczekuje bezwzględnej, pełnej ścieżki dostępu, ale nie rozpoznaje kropki, musisz podać dwie kropki, a potem ukośnik. Jeżeli podasz tylko nazwę pliku, to funkcja będzie jej szukała w katalogu programu. Jednak taką względną ścieżkę dostępu program może łatwo zgubić np. po użyciu okna dialogowego OpenDialog lub SaveDialog, dlatego zawsze należy podawać bezwzględną ścieżkę dostępu, a jeżeli to ma być ścieżka dostępu do katalogu programu to należy podawać ścieżkę bezwzględną, ale względem programu:
Względna ścieżka dostępu do katalogu programu, względem tegoż programu:
KOD cpp:     UKRYJ  
 RichEdit1->Lines->LoadFromFile("1.txt");


Względna ścieżka dostępu do katalogu o jeden poziom wyższego względem programu:
KOD cpp:     UKRYJ  
 RichEdit1->Lines->LoadFromFile("..\\1.txt");


Bezwzględna ścieżka dostępu do katalogu programu, względem tegoż programu:
KOD cpp:     UKRYJ  
 String sDirApp = ExtractFilePath( ParamStr(0) );
 String sFileName = sDirApp + "1.txt";

 RichEdit1->Lines->LoadFromFile( sFileName );


Bezwzględna ścieżka dostępu do katalogu o jeden poziom wyższego względem programu:
KOD cpp:     UKRYJ  
 String sDirApp = ExtractFilePath( ParamStr(0) );
 String sFileName = sDirApp + "..\\zawodnicy.txt";

 RichEdit1->Lines->LoadFromFile( sFileName );


Kolejne poziomy zmienia się dodając kolejne dwukropki i ukośniki:

Bezwzględna ścieżka dostępu do katalogu o dwa poziomy wyższego względem programu:
KOD cpp:     UKRYJ  
 String sDirApp = ExtractFilePath( ParamStr(0) );
 String sFileName = sDirApp + "..\\..\\zawodnicy.txt";

 RichEdit1->Lines->LoadFromFile( sFileName );


W lokalnych ścieżkach dostępu podaje się ukośnik pochylony w lewo, a nie w prawo. Ponieważ ukośnik pochylony w lewo jest znakiem zastrzeżonym, to zawsze poprzedza się go jeszcze jednym ukośnikiem:
KOD cpp:     UKRYJ  
RichEdit1->Lines->LoadFromFile( "c:\\windows\\win.ini" );


Ten ukośnik ma więcej zastosowań. Gdybyś np. chciał umieścić w kodzie tekst w cudzysłowach to musisz je poprzedzić tym ukośnikiem:

KOD cpp:     UKRYJ  
 Edit1->Text = "tekst bez cudzysłowów, \"a to tekst w cudzysłowach\" teraz znów tekst bez cudzysłowów";


wynik:
KOD text:     UKRYJ  
 tekst bez cudzysłowów, "a to tekst w cudzysłowach" teraz znów tekst bez cudzysłowów


W Edit1 pojawi się tekst z cudzysłowami, ale bez ukośników. Gdybyś chciał umieścić dodatkowo jeszcze ukośniki pojedyncze:

KOD cpp:     UKRYJ  
 Edit1->Text = "jakiś tekst \\ znów tekst";


wynik:
KOD text:     UKRYJ  
 jakiś tekst \ znów tekst


a dwa ukośniki w tekście:

KOD cpp:     UKRYJ  
 Edit1->Text = "jakiś tekst \\\\ znów tekst";


wynik:
KOD text:     UKRYJ  
 jakiś tekst \\ znów tekst


Mam nadzieję, że już rozumiesz o co chodzi z tymi ukośnikami.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 58 gości

cron