Dla zaawansowanych - ciagi znakow,dzielenie

0

Prosze o pomoc.

Zadanie. Pobrac nieznana dlugosc tekstu z komorki exela i zapisac do pliku textowego
po 50 znakow w kazdej linii bez dzielenia slow.

Udalo mi sie zrobic.

  • otworzyc exela
  • pobrac dane
  • podzielic dlugosc za pomoca Length
  • zapisac
  • zamknac exela

Nie potrafie jednak oprogramowac by system rozpoznawal czy przypadkiem podczas podzialu na kolejne linie po 50 znakow nie urywa mi wyrazow.

Wiem jak dzielic stringa wykrywajac spacje, ale nie potrafie zastosowac tego do wlasnego problemu.

Moze Was cos oswieci...

0

Jeżeli dobrze zroumiałem, twój problem rozwiaze funkcja WrapText.

0

hmm.
Musze kazda linie po 50 znakow przypozadkowac jakiemus...

x0:=linia znakow 0-50
x1:=linia znakow 50-100
x2:=linia znakow 101-150

..a WrapText jedynie zawinie text a nie rozdzieli (chyba)
jesli sie myle to popraw mnie.

0

A czym rożni sie dzielenie textu po 50 znaków bez dzielenia wyrazów od zawijania tekstu ? To chyba to samo. WrapText zawija tekst przez podzielenie go wybranymi znakami (np. #10#13 - czyli przejście do następnej linii) w liniach o podanej maksymalnej długości. Co powinien robic twoj program jeżeli natrafi na linię w której suma znaków słów i spacji jest dłuższa niż 50 ? Jeżeli w takim przypadku ma przenieśc ostatnie słowo do następnej linii to WrapLine jest jak najbardziej odpowiednie. BTW Nie musisz dzielić tekstu na linie przed WrapText - funckcja poradzi sobie z zawinieciem wielu kolejnych linii.

0

dzielenie textu po 50 znakow a zawijanie textu po 50 znaku to ogromna roznica, przynajmniej dla mnie.

Kazda z utworzonych linii bedzie osobnym wpisem w bazie SQL.

Niestety jesli wyraz "CZEKOLADA" bedzie zawierac sie w znakach
np:47-56 to zostanie uciety na linie
1.cze
2.kolada
Zapisane dane sa eksportowane do bazy RSSQL gdzie istnieje mozliwosc
wyszukiwania po okreslonych slowach. W wypadku szukania "czekolada",
rezultat szukania jest "0". Dlatego zapobiezenie dzieleniu slow jest
dla mnie tak wazne.

0

Teraz na szybko wymyslilem procedure, ktora wypisuje po 50 znakow wlini z uwzglednieniem dzielenia wyrazow, moze Ci sie przyda.

procedure PiszPo50(Co: String);
var
  i: Word;
  spacja: Word;
begin
  if Length(Co)>50 then
  begin
    spacja:=50;
    for i:=1 to 51 do if Co[i]=' ' then spacja:=i-1;
    if spacja=50 then
    begin
      WriteLN(Copy(Co, 1, 50));
      PiszPo50(Copy(Co, 52, Length(Co)-51));
    end else
    begin
      WriteLn(Copy(Co, 1, spacja));
      PiszPo50(Copy(Co, spacja+2, Length(Co)-1));
    end;
  end else WriteLn(Co);
end;
0

Hmmm :-) .

Chyba sie nie do końca rozumiemy. Ujme to ogolnie:
Jeżeli linia którą mamy dzielić :
1.Da sie podzielić na 50 znaków bez ucinania słów => no problem, bierzemy 50 znaków i jest.
2. NIE DA sie podzielić bez dzielenia wyrazów => zawijamy ostatni wyraz do następnej linii (do czego nadaje sie funkcja WrapText). Ewentualnie na końcu linii dodajemy kilka spacji jeżeli musi być 50 znaków (na SQL sie nie znam).

Czy taki schemat nie jest dla Ciebie prawidłowy ??

[dopisane]

Re5pect foflik :-) . Jeżeli tylko działa, to na pewno lepsze od WrapText. [browar]

0

Dzieki, o MASTER!!

DZIALA!

Jeszcze tylko musze oprogramowac dla dlugosci striga od 1-1000 :-)

Ale juz bede potrafic... ort!

[browar] Dla Ciebie! :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1