[ developercorei3 @ 14.07.2012. 14:36 ] @
Imam jedan neobičan zahtev / problem:
- otvoriti 5 csv fajlova,
- izračunati srednju vrednost za svaku ćeliju,
- sačuvati 1 csv fajl sa novim vrednostima, koji ima istu strukturu kao 5 selektovanih.
Da li je moguće računati srednju vrednost matrice, tj. svake ćelije zasebno u Borland Delphi 7 ?

Code:

procedure TForm1.ParseRecord(sRecord: string; Row: integer);
var
  sField, subRecord: string;
  Col, PosComma, PosQ: integer;
begin
  Col := 0;

  repeat
    if Pos('"', sRecord) = 1 then
    begin
      subRecord := Copy(sRecord, 2, Length(sRecord) - 1);
      PosQ := Pos('"', subRecord);
      sField := Copy(sRecord, 2, PosQ - 1);
      // PosQ is position of double quotes in subRecord, which is one character
      //shorter than sRecord
      // Plus two is added due to the fact that there is a comma behind double quotes
      Delete(sRecord, 1, PosQ + 2);
    end
    else begin
      PosComma := Pos(',', sRecord);
      if PosComma > 0 then
      begin
        sField := Copy(sRecord, 1, PosComma - 1);
        Delete(sRecord, 1, PosComma);
      end
      else
        sField := sRecord;
    end;
    StringGrid1.Cells[Col, Row] := sField;
    Col := Col + 1;
  until PosComma = 0;

  // Set column number
  StringGrid1.ColCount := Col;
end;




[Ovu poruku je menjao savkic dana 14.07.2012. u 21:10 GMT+1]
[ savkic @ 14.07.2012. 20:18 ] @
> Imam jedan neobičan zahtev / problem:
> - otvoriti 5 csv fajlova,
> - izračunati srednju vrednost za svaku ćeliju,
> - sačuvati 1 csv fajl sa novim vrednostima, koji ima istu strukturu kao 5 selektovanih.

Koji deo ti predstavlja problem?

> Da li je moguće računati srednju vrednost matrice, tj. svake ćelije zasebno u Borland Delphi 7 ?

Jeste, samo je manji problem kako ;) Elem, jedna ćelija sadrži string sa više numeričkih vrednosti razdvojenih nekim separatorom? Da bi dobio sve pojedinačne vrednosti možeš koristiti neku svoju funkciju, neku gotovu poput StrToken ili StrTokenToStrings iz JclStrings (JCL bibilioteka). Kada imaš pojedinačne vrednosti dalje lako možeš odrediti srednju vrednost...
[ developercorei3 @ 26.07.2012. 17:25 ] @
Hvala Igore,

Pronašao sam tačno to što si mi predložio na http://www.koders.com/delphi/f...AAF1241D90C486EDE5F0F568A.aspx


Code:
function StrToken(var S: AnsiString; Separator: AnsiChar): AnsiString;
var
  I: Integer;
begin
  I := Pos(Separator, S);
  if I <> 0 then
  begin
    Result := Copy(S, 1, I - 1);
    Delete(S, 1, I);
  end
  else
  begin
    Result := S;
    S := '';
  end;
end;

//------------------------------------------------------------------------------

procedure StrTokens(const S: AnsiString; const List: TStrings);
var
  Start: PChar;
  Token: string;
  Done: Boolean;
begin
  Assert(List <> nil);
  List.Clear;
  Start := Pointer(S);
  repeat
    Done := StrWord(Start, Token);
    if Token <> '' then
      List.Add(Token);
  until Done;
end;

//------------------------------------------------------------------------------

procedure StrTokenToStrings(S: AnsiString; Separator: AnsiChar; const List: TStrings);
var
  Token: AnsiString;
begin
  Assert(List <> nil);
  List.Clear;
  while S <> '' do
  begin
    Token := StrToken(S, Separator);
    List.Add(Token);
  end;
end;

//------------------------------------------------------------------------------


Javiću se sa utiscima, čim primenim jednu od navedenih funkcija.