Registreer FAQ Ledenlijst Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 24-01-2007, 21:53
BendeBen
Avatar van BendeBen
BendeBen is offline
voor de studie ben ik bezig met delphi het lukt allemaal vrij aardig maar het volgende krijg ik niet voor elkaar

ik heb een .txt met de volgende data er in
Code:
347	444 	456	327
653	674	324	743
334	434	323	963
346	234	945	682
ik moet zorgen dat ik iedere kolom in een array kan plaatsen
en dit heb ik tot nu toe:
Code:
procedure TForm1.FormCreate(Sender: TObject);
var
bla: integer;
aa: textfile;
bb: integer;
begin
assignfile(aa, 'nrs.txt');
reset(aa);
for bla:= 1 to 4 do begin
read(aa, bb);
inhoud[bla,1]:= bb;
memo1.lines.add(floattostr(inhoud[bla,1]));
end;
closefile(aa);
end;
dit plaatst de eerste rij (dus de bovenste 4 waardes) in de array
readln zorgt ervoor dat ik de eerste kolom (dus de linker 4 waardes) in de array krijg
maar hoe zorg ik er nou voor dat ie bijv alleen de 2e kolom in de array gooit?
__________________
man, it must be great being you watching me.
Met citaat reageren
Advertentie
Oud 25-01-2007, 16:08
ILUsion
Avatar van ILUsion
ILUsion is offline
Citaat:
BendeBen schreef op 24-01-2007 @ 22:53 :
voor de studie ben ik bezig met delphi het lukt allemaal vrij aardig maar het volgende krijg ik niet voor elkaar

ik heb een .txt met de volgende data er in
Code:
347	444 	456	327
653	674	324	743
334	434	323	963
346	234	945	682
ik moet zorgen dat ik iedere kolom in een array kan plaatsen
en dit heb ik tot nu toe:
Code:
procedure TForm1.FormCreate(Sender: TObject);
var
bla: integer;
aa: textfile;
bb: integer;
begin
assignfile(aa, 'nrs.txt');
reset(aa);
for bla:= 1 to 4 do begin
read(aa, bb);
inhoud[bla,1]:= bb;
memo1.lines.add(floattostr(inhoud[bla,1]));
end;
closefile(aa);
end;
dit plaatst de eerste rij (dus de bovenste 4 waardes) in de array
readln zorgt ervoor dat ik de eerste kolom (dus de linker 4 waardes) in de array krijg
maar hoe zorg ik er nou voor dat ie bijv alleen de 2e kolom in de array gooit?
Je moet dit met 2 for-lussen oplossen. Je moet inderdaad per regel inlezen. Momenteel heb je voor de variabele inhoud een typedefinitie die hieronder staat, in plaats van op te slaan in [x,y] kun je opslaan in [y,x].

Code:
var inhoud : array[1..4] of array of [1..4] of integer;
Vergeet ook niet dat het inlezen niet zo simpel gaat als in jouw programma momenteel staat: wat je inleest is een string van de hele eerste lijn. Die moet je dan met stringmanipulaties omzetten naar 4 strings en die strings kan je weer omzetten naar integers die je in je array kan invoegen. Die stringmanipulaties zijn niet altijd even makkelijk om uit te dokteren, vaak is het een kwestie van proberen tot het werkt. Dat manipuleren moet je volgens mij wel kunnen doen met de functies copy, length en pos. (Spijtiggenoeg heeft Delphi geen explode zoals PHP, dan was dat gewoon een functie en hopla, je had je array).

Verder heb ik eens geprobeerd om die file in te laden als file of integer in plaats van textfile (file of string), maar dat gaf geen goede resultaten (daarmee had je anders gewoon read(file,x) en dan die x in je array steken voor alle waarden zonder stringmanipulaties, maar volgens mij kan die enkel werken met binaire bestanden en die van jou is een tekstbestand met getallen in tekstvorm en geen binaire getallen).

Probeer ook je code wat leesbaarder te maken: indentatie en deftige namen voor je variabelen. Als je later met grotere projecten zal werken, zal je het nut daarvan in ieder geval inzien.

Hieronder de onvolledige code van mezelf;
Code:
procedure TForm1.FormCreate(Sender: TObject);
var cntR, cntC : integer;
    numfile : textfile;
    tempE ,
    tempR : string;
const filename = 'nrs.txt';
begin
  if FileExists(filename)
    then
      try
        AssignFile(numfile,filename);
        Reset(numfile);
        for cntR:= 1 to 4 do
          begin
            ReadLn(numfile,tempR);
            for cntC := 1 to 4 do
              begin
                if cntC < 4
                  then
                    begin
                      tempE:=copy(tempR,0,4);
                      delete(tempR,0,4);
                    end
                  else
                    begin
                      tempE:=tempR;
                    end;
                tempE:=trim(tempE);
                inhoud[cntR,cntC] := StrToIntDef(tempE,0);
              end;
          end;
      finally
        Closefile(numfile);
      end;
  Memo1.Lines.LoadFromFile(filename);
  Memo1.Lines.Add('');
  for cntR := 1 to 4 do
    begin
      tempR := '';
      for cntC := 1 to 4 do
        begin
          tempR:= tempR + IntToStr(inhoud[cntC,cntR]);
          if cntC < 4
            then tempR:= tempR + '  ';
        end;
      Memo1.Lines.Add(tempR);
    end;
end;
Mijn declaratie voor inhoud staat in het vorige code-blok. Mijn code doet ergens iets verkeerd, maar ik heb niet veel zin om te gaan debuggen daarop (stringmanipulaties zijn niet mijn ding), de code haalt steeds enkel het eerste getal op, waarom: geen idee. Verder niet zo heel mooi omdat het me niet lukt te laten checken op de TABs (daarom die vastgezet o,4 bij copy, normaalgezien moet daar 0, pos('tab')+1 o.i.d. staan, maar het lukt me zoals ik al zei niet dat juist te krijgen.

Waarschijnlijk kun je wel voortbouwen op deze code (let er ook vooral op hoe meer leesbaar dit alles is door indentatie, bij jouw code heb je syntax highlighting nodig om er iets meer in te zien). maar je mag met indentatie doen wat je wilt, zo lang je een beetje consistent blijft en je zelf makkelijk je weg vindt in de code; maar het is volgens mij een van de vereisten om goed leesbare code te maken :-)
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
Met citaat reageren
Oud 25-01-2007, 18:42
BendeBen
Avatar van BendeBen
BendeBen is offline
hey bedankt voor je tijd
wat je zei over 2 loops gebruiken was even een "oja!" moment voor mij, tis eigenlijk heel simpel

kheb t nu zo
(het gaat eigenlijk om een bestand van 512 regels en 8 kolommen)

Code:
procedure TForm1.FormCreate(Sender: TObject);
var
bla, bla2: integer;
aa: textfile;
bb: real;

begin
assignfile(aa, 'OPEN.txt');
reset(aa);

for bla2:= 1 to 512 do begin
for bla:= 1 to 8 do begin
read(aa, bb);
inhoud[bla2,bla]:= bb;
memo1.lines.add(floattostr(inhoud[bla2,bla]));
end;
memo1.lines.add('');
end;

closefile(aa);
end;
zo leest ie de data van de 8 kolommen op 1 regel en zet dat in de array en gaat dan naar de volgende regel
kheb m ook nog zo ver gekregen dat ie de waardes van 1 hele kolom in een lijngrafiek zet (alleen meerdere lijnen in 1 chart lukt me niet maar is ook meer iets om voor de lol te weten)

nou moet ik nog de correlatie berekenen tussen de verschillende kolommen met een stuk code dat ik gekregen heb maar dat doe ik morgen wel want die ziet er niet prettig uit

en ja leesbaarheid is niet zo geweldig maar ik doe verder toch nix met programmeren, tis alleen een vak dat ik moet halen
__________________
man, it must be great being you watching me.
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 00:50.