CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Filtrowanie wyrazów z Memo1

Filtrowanie wyrazów z Memo1

dział ogólny

Filtrowanie wyrazów z Memo1

Nowy postprzez nvdante » poniedziałek, 19 marca 2012, 17:43

Jakim kodem mogę wyszukać w Memo1 wyrazy?
Wiem, jak wyświetlić całą linię lub pojedyncze litery, ale całego wyrazu za nic mi się nie udaje.
Przyjmijmy, że mam tekst "Ala ma kota" i chciałbym, żeby pętla dała ShowMessage tyle razy ile jest wyrazów ( nie znaków czy linii ), a w każdym był kolejny wyraz: "Ala", "ma", "kota".
Wydaje się dość proste, a jednak w opisie funkcji String nic nie znalazłem, chociaż zastosowanie SubStringa trochę mi pomogło, ale nie przy nieokreślonej liczbie znaków :(

Pozdrawiam
Ostatnio edytowano wtorek, 20 marca 2012, 14:22 przez nvdante, łącznie edytowano 1 raz
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows XPFirefox

Re: Filtrowanie wyraznów z Memo1

Nowy postprzez Cyfrowy Baron » wtorek, 20 marca 2012, 10:15

Chcesz po prostu policzyć wyrazy w Memo?!

KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{

 String sMt = Memo1->Text;
 int iMtl = sMt.Length();
 int iIle = 0;

 for( int i = 0; i < iMtl; i++ )
 {
  int iP = sMt.Pos(" ");

  if( !iP ) iP = iMtl; /* równoznaczne z zapisem: if( iP == 0) iP = iMtl */

  /* pokaż w komunikacie liczony wyraz */
  if( CheckBox1->Checked )
  {
   String sMts = sMt.SubString(0, iP - 1);
   ShowMessage(sMts);
  }
  /**/

  iIle++;

  sMt.Delete(1, iP);

  if( sMt.Trim().IsEmpty() ) break;

  iMtl = sMt.Length();
 }

 ShowMessage( "Tekst zawiera: " + (String)iIle + " wyrazów." );
}



Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
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: Filtrowanie wyrazów z Memo1

Nowy postprzez nvdante » wtorek, 20 marca 2012, 12:24

Kod który pokazałeś wyświetla w ShowMessage wszystkie wyrazy na raz, a nie każdy w oddzielnym, a właśnie o to mi chodzi.

Odpowiadając na Twoje pytanie chciałbym zrobić operacje na wyrazach, powiedzmy, ze coś w stylu syntezatora mowy. Po odczytaniu wyrazu odtwarzany jest dźwięk. Próbowałem z odtwarzaniem samych liter, ale wychodzi z tego śmieszne techno ;) Zastanawiam się nad sylabami, ale ogrom możliwości mnie przytłacza i już dokładniej będzie każdy wyraz oddzielnie.

Ps.: Jeśli przyjmiemy, że w kodzie, w jednej funkcji będzie na przykład 300 000 warunków if to jak najlepiej to zrobić, żeby kod był sprawny? Po prostu warunek po warunku?

Pozdrawiam
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows XPFirefox

Re: Filtrowanie wyraznów z Memo1

Nowy postprzez Cyfrowy Baron » wtorek, 20 marca 2012, 12:48

nvdante napisał(a):Kod który pokazałeś wyświetla w ShowMessage wszystkie wyrazy na raz, a nie każdy w oddzielnym, a właśnie o to mi chodzi.


No, nie jest to prawdą. Kod wyświetla w komunikacie wszystkie wyrazy po kolei, nie pobrałeś programu, a tam jest to dobrze widoczne.



nvdante napisał(a):Ps.: Jeśli przyjmiemy, że w kodzie, w jednej funkcji będzie na przykład 300 000 warunków if to jak najlepiej to zrobić, żeby kod był sprawny? Po prostu warunek po warunku?


Ni żartuj... :D Trzeba znaleźć takie rozwiązanie, które nie będzie wymagało tylu warunków. Rozumiem, że chcesz zrobić coś takiego: jeżeli taki wyraz - to taki dźwięk, ale to można rozwiązać inaczej, tworząc listę wyrazów z przypisanymi dźwiękami, a program przeszukuje listę i po odnalezieniu wyrazu odtwarza dźwięk do niego przypisany - patrz porada w serwisie Cyfrowy Baron
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: Filtrowanie wyraznów z Memo1

Nowy postprzez nvdante » wtorek, 20 marca 2012, 13:05

Cyfrowy Baron napisał(a):No, nie jest to prawdą. Kod wyświetla w komunikacie wszystkie wyrazy po kolei, nie pobrałeś programu, a tam jest to dobrze widoczne.


Baronie, wkleiłem kod u siebie i sprawdziłem. Wyrazy dostaje, ale wszystkie w jednym ShowMessage, a nie każdy w innym.

Cyfrowy Baron napisał(a):Ni żartuj... :D Trzeba znaleźć takie rozwiązanie, które nie będzie wymagało tylu warunków. Rozumiem, że chcesz zrobić coś takiego: jeżeli taki wyraz - to taki dźwięk, ale to można rozwiązać inaczej, tworząc listę wyrazów z przypisanymi dźwiękami, a program przeszukuje listę i po odnalezieniu wyrazu odtwarza dźwięk do niego przypisany - patrz porada w serwisie Cyfrowy Baron


Fajna sprawa z tą listą. Skoro, jak czytam, można odtwarzać także dane z pliku to wygląda na to, że jest to idealne rozwiązane. Ciekawe tylko, jak zareaguje przy ogromnej liście możliwości.

Pozdrawiam
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows XPFirefox

Re: Filtrowanie wyraznów z Memo1

Nowy postprzez Cyfrowy Baron » wtorek, 20 marca 2012, 13:15

nvdante napisał(a):aronie, wkleiłem kod u siebie i sprawdziłem. Wyrazy dostaje, ale wszystkie w jednym ShowMessage, a nie każdy w innym.


To wynika z różnic w środowiskach. BCB6 jest już mocno przestarzałe.
Ten kod powinien działać u Ciebie tak jak i u mnie:

KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{

 String sMt = Memo1->Text;
 int iMtl = sMt.Length();
 int iIle = 0;

 for( int i = 0; i < iMtl; i++ )
 {
  int iP = sMt.Pos(" ");

  if( iP == 0 ) iP = iMtl;

  /* pokaż w komunikacie liczony wyraz */
  if( CheckBox1->Checked )
  {
   String sMts = sMt.SubString(0, iP - 1);
   ShowMessage(sMts);
  }
  /**/

  iIle++;

 sMt = sMt.Delete(1, iP);

  if( sMt.Trim().IsEmpty() ) break;

  iMtl = sMt.Length();
 }

 ShowMessage( "Tekst zawiera: " + (String)iIle + " wyrazów." );
}
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: Filtrowanie wyrazów z Memo1

Nowy postprzez nvdante » wtorek, 20 marca 2012, 14:24

A w nowych środowiskach obsługa Indy także jest załączona?
Na jakie najlepiej się przesiąść? Przyzwyczaiłem się do BCB3, później BCB6.
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows XPFirefox

Re: Filtrowanie wyrazów z Memo1

Nowy postprzez Cyfrowy Baron » środa, 21 marca 2012, 01:16

Teraz najlepiej na XE2, ale od razu z poprawką Update 4, gdyż bez tej poprawki środowisko zawiera masę błędów.
Co do INDY to TAK!
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 7 gości