Pieter Opublikowano 17 Sierpnia 2006 Udostępnij Opublikowano 17 Sierpnia 2006 No więc mam algorytm split do rozdzielania stringu i wygląda on następująco: 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: 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!!! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Zakol Opublikowano 17 Sierpnia 2006 Udostępnij Opublikowano 17 Sierpnia 2006 Ja bym zrobil cos takiego, chociaz nie mam pojecia czy to zadziala, bo bawilem sie delphim tylko przez tydzien :P function split(input:string;schar:char;s:integer):string; var i,n,skip:integer; schop: string; begin n := 1; skip := 0; for i := 1 to length(input) do begin if (input[i] = schar && skip = 0) then begin inc(n); if n = s then split := schop else schop := ''; end else begin if (input[i] = '"') then begin if (skip = 1) then skip := 0; else skip := 1; end schop := schop + input[i]; end; end; end; Zedytowalem to troche chociaz watpie czy to cos da :] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pieter Opublikowano 17 Sierpnia 2006 Autor Udostępnij Opublikowano 17 Sierpnia 2006 Po poprawieniu błędów i tak nie działa :/ :boxed: Napisałem na 4programmers net i zaraz otrzymałem taką odpowiedz: 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; I to się nazywa szybka pomoc... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się