Mój algorytm SPLIT

P6
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 17 lat
0

No więc mam algorytm split do rozdzielania stringu i wygląda on następująco:

Kopiuj
function split(input:string;schar:char;s:integer):string;
    var
       i,n:integer;
       schop: string;
    begin
       n := 1;
       for i := 1 to length(input) do
       begin
         if (input[i] = schar) then
         begin
           inc(n);
           if n = s then
           split := schop
           else
           schop := '';
           end
         else
           schop := schop + input[i];
         end;
    end;

kiedy chce podzielić taki string robie tak:

Kopiuj
text_przed = '10 43 "Its Cool"';
text_po = split(text_przed,' ',2);

to wtedy text_po zamiast stać się Its Cool staje się "Its ponieważ funkcja rozdziela tekst po każdym znaku spacji a pomiędzy Its a Cool jest spacja więc to też rozdziela. I z tąd moja proźba czy mógł by mi ktoś dopisać do tej funkcji coś żeby tekst pomiędzy znakami "" ze spacją liczyła jako jedeną część? Wiecie żeby zamiast rozdzielone zwróciła całe. PLZZ POMOCY!!!

crowa
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 8 lat
  • Lokalizacja:Poznań
  • Postów:295
0

napisz jaka postac ma wczytywany tekst:
a.) staly uklad np 2 cyfry spacja 2 cyfry spacja slowo spacja slowo
b.) niereguralny

Mozna to zrobic np tak
znajdz pierwsza spacje i pomijaj co 2 spacje i dziel tak az do konca
Mozliwosci jest wiele ale napisz dokladnie jakie sa dane wejsciowe i jak chcesz je dzielic.
Mozna tez szukac az znajdzie 1 litere w tekscie i od tego czasu do konca zczytac calosc ze spacjami.
Pamietam ze delphi potrafi zwrocic cos takiego NAN (Not A Noumber)


Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0
Kopiuj
function split(input:string;schar:char;s:integer):string;
    var
       i,n:integer;
       quote, //czy badany znak pochodzi z pomiedzy cudzyslowow
       is_quote, //czy aktualny znak to cudzyslow
       is_schar, //czy aktualny znak to schar i nie pochcodzi z pomiędzy cudzysłowow
       poprzedni_ok //czy poprzedni znak należy do wyrazu
       :bool;
    begin
       n := 1;
       quote := False;
       for i := 1 to length(input) do
       begin
         is_quote := input[i] = '"';
         is_schar := not quote and (input[i] = schar);
         if is_quote or is_schar then
         begin
           if quote or poprzedni_ok then
           begin
             inc(n);
             if n > s then Exit else Result := '';
           end;
           if is_quote then quote := not quote;
           poprzedni_ok := False;
         end else
         begin
           Result := Result + input[i];
           poprzedni_ok := True;
         end;
       end;
       if poprzedni_ok then inc(n); //zwiekszamy n jesli ostatni wyraz nie był policzony
       if n <= s then Result := ''; //gdy za malo wyrazów we frazie
    end;

var text_przed, text_po: string; i:integer;
begin
for i:=1 to 5 do
begin
  text_przed := '    10       43  "  Its Cool "  sdafas   sadfa     ';
  text_po := split(text_przed,' ',i);
  ShowMessage('''' + text_po + '''');
end;
P6
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 17 lat
0

Chyba się zakochałem :-) Dzięki adf88 i love 4programmers!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.