Wstawianie kilka wersów do jednego wiersza tabeli

0

Witam,

chciałabym aby dane w takiej (przykładowej) postaci:

aaaaa

bbbb
cccccccccccccccccc

dddd

XXXXX

eee

bbbb
ppp

dddd

wylądowały w tabeli w taki sposób:

  1. aaaaa bbbb cccccccccccccccccc dddd
  2. eee bbbb ppp dddd

Innymi słowy naszym separatorem jest XXXXX. Chciałabym aby wszystkie zdania, które rozdziela separator znalazły się w jednym wierszu tabeli. Próbowałam w taki sposób:

while not eof(file) do
  begin
      Readln(file,s);
        StringGrid1.RowCount:=Row+2;
        StringGrid1.Cells[1, Row+1]:=Trim(Parse(s,','));
        Inc(Row);
  end; 

ale niestety każde "zdanie" ląduje do osobnego wiersza, czyli moja tabela wygląda tak:

  1. aaaaa
  2. bbbb
  3. cccccccccccccccccc itd.

Czy ktoś mógłby mi z tym pomóc? Wiem że na pewno istnieje jakieś proste rozwiązanie, na które nie mogę wpaść :P

1

A czym jest i jak działa funkcja Parse?

Musisz wczytywać linie dotąd, aż napotkasz albo linię separatora, albo koniec pliku (o ile faktycznie dane ładujesz z pliku, bo nie wiem po co jest ten StringGrid); Jeżeli linia jest różna od linii separatora i nie jest pusta - dodajesz ją do zmiennej ze sumą wartości;

Przykładowa zawartość pliku:

aaaaa

bbbb
cccccccccccccccccc

dddd

XXXXX

eee

bbbb
ppp

dddd

kod testowy:

const
  SEPARATOR_LINE = 'XXXXX';
var
  fInput: TextFile;
  strSum, strLine: AnsiString;
begin
  AssignFile(fInput, 'C:\Input.txt');
  Reset(fInput);
  try
    while not EoF(fInput) do
    begin
      strSum := '';

      repeat
        ReadLn(fInput, strLine);

        if (strLine <> '') and (strLine <> SEPARATOR_LINE) then
          strSum := strSum + strLine + ' ';
      until EoF(fInput) or (strLine = SEPARATOR_LINE);

      WriteLn('"', strSum, '"');
    end;
  finally
    CloseFile(fInput);
    ReadLn;
  end;
end.

na wyjściu (w oknie konsoli) otrzymamy:

"aaaaa bbbb cccccccccccccccccc dddd "
"eee bbbb ppp dddd "

Jeżeli znaku spacji na końcu każdej wyświetlanej linii ma nie być, to po zakończeniu pętli Repeat trzeba sprawdzić czy zmienna strSum jest pusta - jeśli nie jest, to trzeba ten znak usunąć, np. procedurą Delete, albo skróć łańcuch procedurą SetLength; I to tyle - coś takiego napisz sobie, tyle że sumy linii nie wyświetlaj, a wrzucaj do bazy.

1

StringGrid nie wspiera domyślnie komórek wielolinijkowych. Jeśli chcesz taki "bajer" to musisz tekst w komórkach rysować sam - więcej info https://www.google.pl/search?q=delphi+stringgrid+multiline+cell

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