Chodzi mi odpowiednik funkcji explode w php.
- Kod: Zaznacz cały
<?
$str = "a, b, c, d, e";
$x = explode(", ", $str);//s
echo"4 litera to {$x["3"]}";//numerowane od zera
?>
<?
$str = "a, b, c, d, e";
$x = explode(", ", $str);//s
echo"4 litera to {$x["3"]}";//numerowane od zera
?>

void __fastcall TForm1::Button4Click(TObject *Sender)
{
String tekst = "abcde";
String x = tekst[4]; // czwarta litera numerowanie od 1
ShowMessage("Czwarta litera to: " + x);
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
String tekst[] = {"a", "b", "c", "d", "e"};
String x = tekst[3]; // czwarta litera numerowanie od 0
ShowMessage("Czwarta litera to: " + x);
}
{
String tekst1[] = {"a", "b", "c", "d", "e"};
String tekst = "abcde";
ShowMessage("Czwarta litera to: " + tekst1[3]);
ShowMessage("Czwarta litera to: " + (String)tekst[4]); // zwróć uwagę na rzutowanie zmiennej String
}





AnsiString explode(String tekst, String sep, int index) // funkcja własna
{
if(index <= 0)
{
ShowMessage("Funkcja oczekuje wartości większej od zera!");
return "";
}
String Result = "";
__int8 c = 0;;
if(index > 1) c = 1;
for(int i = 0; i < index - c; i++)
{
int x = tekst.Pos(sep);
if(x <= 0 && index > 1)
{
ShowMessage("Podany ciąg znaków zawiera tylko " + (String)(i + 1) + " rekordów!");
return "";
}
if(index > 1) tekst = tekst.Delete(1, x + 1);
int y = tekst.Trim().Pos(sep);
if(y > 0 ) Result = tekst.SubString(1, y - 1);
else Result = tekst.SubString(1, tekst.Length());
}
return Result.Trim();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) //zdarzenie OnClick dla przycisku Button1
{
String txt = "ala, b, c, darek, elf, foka, kot";
Edit2->Text = explode(txt, ",", 0);
}


Koziol napisał(a):Nie łatwiej przeszukac kod - zródło PHP w dowolnej wersji i znaleźć kod odpowiadający za tę funkcje, skompilować jako dll i przyłaczyć do projektu ??.


Cyfrowy Baron napisał(a):Koziol napisał(a):Nie łatwiej przeszukac kod - zródło PHP w dowolnej wersji i znaleźć kod odpowiadający za tę funkcje, skompilować jako dll i przyłaczyć do projektu ??.
.. i to miało by być prościej, niż włączenie w kod programu prostej funkcji.
Idąc Twoim tropem, można by zamiast pisania programów, tworzyć kody skryptowe i używać tylko przeglądarki internetowej...



//---------------------------------------------------------------------------
int explode(String tekst, String sep)
{
int y = 0;
for(int i = 0; i <= tekst.Length(); i++)
{
int x = tekst.Pos(sep);
if(x >= 1 && x < tekst.Length()) // x < tekst.Length() - zabezpieczenie przed separatorem na końcu
{
tekst = tekst.Delete(1, x + 1);
y++;
}
}
return y + 1;
}
//---------------------------------------------------------------------------
AnsiString explode(String tekst, String sep, int index)
{
if(index <= 0)
{
ShowMessage("Funkcja oczekuje wartości większej od zera!");
return "";
}
String Result = "";
__int8 c = 0;;
if(index > 1) c = 1;
for(int i = 0; i < index - c; i++)
{
int x = tekst.Pos(sep);
if(x <= 0 && index > 1)
{
ShowMessage("Podany ciąg znaków zawiera tylko " + (String)(i + 1) + " rekordów!");
return "";
}
if(index > 1) tekst = tekst.Delete(1, x + 1);
int y = tekst.Trim().Pos(sep);
if(y > 0 ) Result = tekst.SubString(1, y - 1);
else Result = tekst.SubString(1, tekst.Length());
}
return Result.Trim();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
String txt = "ala, b, c, darek, elf, foka, kot";
Edit2->Text = explode(txt, ",", 1);
Edit3->Text = "Tekst zawiera: " + (String)explode(txt, ",") +
" rekordów rozdzielonych znakiem ','";
}
//---------------------------------------------------------------------------
AnsiString explode(String tekst, String sep, int index, int &rec)
{
if(index <= 0)
{
ShowMessage("Funkcja oczekuje wartości większej od zera!");
return "";
}
String Result = "";
__int8 c = 0;;
if(index > 1) c = 1;
String tekst2 = tekst;
rec = 0;
for(int i = 0; i < tekst2.Length(); i++)
{
int y = tekst2.Pos(sep);
if(y >= 1 && y < tekst2.Length())
{
tekst2 = tekst2.Delete(1, y + 1);
rec++;
}
if(i < index - c)
{
int x = tekst.Pos(sep);
if(x <= 0 && index > 1)
{
ShowMessage("Podany ciąg znaków zawiera tylko " + (String)(i + 1) + " rekordów!");
}
if(index > 1) tekst = tekst.Delete(1, x + 1);
int y = tekst.Trim().Pos(sep);
if(y > 0 ) Result = tekst.SubString(1, y - 1);
else Result = tekst.SubString(1, tekst.Length());
}
}
rec = rec + 1;
return Result.Trim();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
String txt = "ala, b, c, darek, elf, foka, kot";
int records;
Edit1->Text = "Poszukiwany rekord: " + explode(txt, ",", 7, records) +
", wszystkich rekordów jest: " + (String)records;
}
//---------------------------------------------------------------------------


Powrót do Ogólne problemy z programowaniem
Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 7 gości