pobieranie numerow ze stringa

0

mam tablice dwuwymiarowa liczb integer w memo:
365 353 970 117 735 460 524 681
70 361 419 378 84 168 663 264
897 465 841 318 432 728 390 750
625 809 208 989 54 536 836 528
857 720 697 47 37 125 120 487
517 190 146 0 563 557 332 932
412 688 62 284 249 138 75 304
852 265 205 139 553 433 577 721
340 992 719 304 239 604 357 327
314 690 838 524 907 56 460 452

chce to przeniesc do tablicy array of integer, czy mozna to zrobic w jakis prosty sposob, np. jak readln(tab[a,y],tab[a,y+1],tab[a,y+2],tab[a,y+3])?

0

Gdzie tu tablice dwuwymiarową widzisz.. jak to powiedział Marek Konrad: "Pokaż palcem bo nie widze"..

0

Gdzie tu tablice dwuwymiarową widzisz.. jak to powiedział Marek Konrad: "Pokaż palcem bo nie widze"..

ok, to tablice, ale jak to zrobic?
-------- dopisane

365 353 970 117 735 460 524 681
70 361 419 378 84 168 663 264
897 465 841 318 432 728 390 750
625 809 208 989 54 536 836 528
857 720 697 47 37 125 120 487
517 190 146 0 563 557 332 932
412 688 62 284 249 138 75 304
852 265 205 139 553 433 577 721
340 992 719 304 239 604 357 327
314 690 838 524 907 56 460 452

teraz widzisz? tablica 10 na 8

0

Aaa chyba za dużo czegoś tam ... (piwa?) :) - zrób to w pętli po każdej linii jeden wiersz.. no chyba, że readln tak działa jak napisałeś.. ale nie jestem pewien ..: juz dzisiaj na nic nie odpisuje :P

Użyj StrToInt()...

Cieżko ciężko .. trzeba by tu chyba straszne pętle robić .. wczytywać linie memo, później znaki z zaznaczeniem że nie jest spacja .. później jakoś dodawac.. - nie wiem bym musiał Delphi odpalić :/

0

Aaa chyba za dużo czegoś tam ... - zrób to w pętli po każdej linii jeden wiersz.. no chyba, że readln tak działa jak napisałeś.. ale nie jestem pewien ..: juz dzisiaj na nic nie odpisuje :P

Użyj StrToInt()...

nie przejmuj sie, kazdemu moze sie zmeczyc wzrok gdy za dlugo siedzi przed komputerem. Ale w tym sek, ze nie bardzo wiem jak uzyc readln w polaczeniu z memo.

Jak uzyc strtoint, bo chyba nie tab:=strtoint(memo.lines.text) :D

0
function get(s:string;var a:array of integer);
type ct='0'..'9';
var
  i,j,k,l:integer;
  t:string;
begin
  j:=length(s);
  i:=1;
  repeat
    while((i<=j)and(not(s[i]in[ct])))do inc(i);
    t:='';
    while((i<=j)and(s[i]in[ct]))do
      begin
        t:=t+s[i];
        inc(i);
      end;
    if(t<>'')then
      begin
        val(t,k,l);
        l:=length(a);
        setlength(a,l+1);
        a[l]:=k;
      end;
  until i>j
end;

I tak po kolei każdą linijke.

// za kod nie odpowiadam, bo pisze z pamieci (brak delphi pod nosem).

0
function get(s:string;var a:array of integer);
type ct='0'..'9';
var
  i,j,k,l:integer;
  t:string;
begin
  j:=length(s);
  i:=1;
  repeat
    while((i<=j)and(not(s[i]in[ct])))do inc(i);
    t:='';
    while((i<=j)and(s[i]in[ct]))do
      begin
        t:=t+s[i];
        inc(i);
      end;
    if(t<>'')then
      begin
        val(t,k,l);
        l:=length(a);
        setlength(a,l+1);
        a[l]:=k;
      end;
  until i>j
end;

I tak po kolei każdą linijke.

// za kod nie odpowiadam, bo pisze z pamieci (brak delphi pod nosem).

Flabra, chodzilo mi o proste rozwiazanie :) Probuje to skompilowac, jak na razie poprawilem besposrednie odwolanie do typu ct, kompilator tez zacina sie na setlength(a,l+1); a - to jest zwracana wartosc w integerach? Bo jesli tak to trzeba by ja bylo chyba za nawais wyciagnac. Poza tym co znaczy not(s[i]in[ct])? Jesli w literze numer i ze stringu s nie ma liczby od 0 do 9 ?

Trudniej mi poprawiac czyjes, niz napisac swoj kod:

var
tab3: tab100;
k,l,j,u: word;
stemp : string;
begin
for k:=0 to sList.Lines.Count-1 do
begin
l:=0;
j:=0;
u:=0;
repeat
inc(u);
l:= j;
repeat
inc(l);
until sList.Lines[k][l]=' ';
inc(j);
stemp:=copy(sList.Lines[k],j,l-j);
tab3[k,u]:=StrToInt(stemp);
j:=l;
until j>=length(sList.Lines[k])-1;
end;

choc twoj pewnie byl uniwersalniejszy, bo nie zalezny od ilosci spacji pomiedzy liczbami

0

A może tak? Na Formę wrzuc Memo, StringGrida i Buttona - od razu sprawdzisz działanie

const
   cyfry=['0','1','2','3','4','5','6','7','8','9'];
type
   tab_def=array of array of Integer;

//wrzuca do tablicy liczby całkowite oddzielone spacjami
procedure LiczbyZMemoDoTablicy(Memo:TMemo;var tab:tab_def;
                               var ile_wierszy,ile_liczb_max:Integer);
var
  w,k:Integer;//wiersze kolumny w Memo
  ile_liczb:Integer;//ile liczb w linii Mema
  wiersz,wyraz:string;
begin
  if Memo.Lines.Count>0 then //sa wpisy w Memo
  begin
    ile_liczb_max:=0;
    ile_wierszy:=0;
    for w:=0 to Memo.Lines.Count-1 do
    begin
      ile_liczb:=0;
      wiersz:=Trim(Memo.Lines[w]);
      if wiersz<>'' then
      begin
        inc(ile_wierszy);
        k:=0;
        repeat
          wyraz:='';
          repeat
            inc(k);
            if (wiersz[k]<>' ')and(wiersz[k] in cyfry) then//brane sa tylko cyfry
            wyraz:=wyraz+wiersz[k];
          until (wiersz[k]=' ')or(k=Length(wiersz));
          wyraz:=Trim(wyraz);
          if wyraz<>'' then
          inc(ile_liczb);
          if ile_liczb>ile_liczb_max then
          ile_liczb_max:=ile_liczb;
          SetLength(tab,ile_wierszy,ile_liczb_max);
          if wyraz<>'' then
          tab[ile_wierszy-1,ile_liczb-1]:=StrToInt(wyraz);
        until k=Length(wiersz);
      end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  w1,k1,ile_liczb_max,ile_wierszy:Integer;
  var tab:tab_def;
begin
  LiczbyZMemoDoTablicy(Memo1,tab,ile_wierszy,ile_liczb_max);
  if (ile_wierszy>0)and(ile_liczb_max>0) then
  begin
    StringGrid1.ColCount:=ile_liczb_max;
    StringGrid1.RowCount:=ile_wierszy;
    for k1:=0 to StringGrid1.ColCount-1 do
    for w1:=0 to StringGrid1.RowCount-1 do
    begin
      StringGrid1.Cells[k1,w1]:='';
      StringGrid1.ColWidths[k1]:=30;
      StringGrid1.RowHeights[w1]:=20;
      StringGrid1.Cells[k1,w1]:=IntToStr(tab[w1,k1]);
    end;
  end;
end;
0
type
  T2DTab = array of array of Integer;

function FP(var S: string; Sep: string): string;
var
  I: Integer;
begin
  I := Pred(Pos(Sep, S));
  if I = -1 then I := Length(S);
  Result := Copy(S, 1, I);
  Delete(S, 1, I + Length(Sep));
end;

procedure StrTo2DTab(Str: string; var Tab: T2DTab);
var
  S: string;
  I, J: Integer;
begin
  I := 0;
  while Str <> '' do
  begin
    Inc(I);
    SetLength(Tab, I);
    S := FP(Str, #13#10);
    J := 0;
    while S <> '' do
    begin
      Inc(J);
      SetLength(Tab[I-1], J);
      Tab[I-1, J-1] := StrToIntDef(FP(S, #32), 0);
    end;
  end;
end;

Sprawdzenie:

procedure TForm1.Button1Click(Sender: TObject);
var
  Tab: T2DTab;
  I, J: Integer;
begin
  StrTo2DTab(Memo1.Text, Tab);
  for I := 0 to Length(Tab) -1 do
  begin
    for J := 0 to Length(Tab[I]) -1 do
      Memo2.Text := Memo2.Text + IntToStr(Tab[I,J]) + ' ';
    Memo2.Text := Memo2.Text + #13#10;
  end;
end;

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