Avatar billede tomaz Nybegynder
18. april 2000 - 13:54 Der er 6 kommentarer og
1 løsning

Omfattende Databehandling

Jeg skal lave et program til behandling af samplede data. Dataene ligger typisk i 15-20 filer. Jeg skal have mulighed for at saette disse filer sammen, samt sammenligne data fra flere forskellige sites.

Umiddelbart er det oplagt at oprette en database, men spoergsmaalet er hvordan dataene loades ind i programmet. Nogen ideer?

Avatar billede sjensen Nybegynder
18. april 2000 - 14:26 #1
Hvis dataene er tekstfiler (ascii) så brug "textfile".

eks:

var
  fil1  : textfile;
  fil2  : textfile;
  ..
  fil15  : textfile;
  s      : array[1..15] of string;
begin
  assignfile(fil1,"Filnavn1");Reset(fil1);
  assignfile(fil2,"Filnavn2");reset(fil2);
  ..
  assignfile(fil15,"Filnavn15");reset(fil15);
 
  while not eof(fil1) do
  begin
    readln(fil1,s[1]);
    ..  // behandle data fra fil 1
  end;

  while not eof(fil2) do
  begin
    readln(fil2,s[2]);
    ..  // behandle data fra fil 2
  end;

  o.s.v.

  closefile(fil15);
  ..
  closefile(fil2);
  closefile(fil1);
end;

Det var bare et forslag

Hvis det er ens filer, og behandlingen af en fil kan afsluttes inden næste fil indlæses kan du lave en procedure du kalder:

procedure beh_data(f : string);
var fil : textfile;
    s  : string;
begin
  assignfile(fil,f);
  reset(f);
  while not eof(fil) do
  begin
    readln(fil,s);
    .. // behandl data i s
  end;
  closefile(fil);
end;

og så kalde den med:

beh_data("filnavn1); 
beh_data("filnavn2); 
..
beh_data("filnavn15); 

Avatar billede tomaz Nybegynder
19. april 2000 - 17:43 #2
Ja.. det er selvfølgelig en måde.., men jeg vil nu helst have det ind i en datatbase, da jeg skal kunne udtage enkelte tidsserier, sammenligne samtidige samplinger.. osv..
Avatar billede delphidaner Nybegynder
25. april 2000 - 09:31 #3
Aaad!! Jeg fraråder kraftigt at bruge de kommandoer til at åbne filer med. Det er alt for langsomt og ressourcekrævende ved større filer. Brug istedet streams, f.eks. TFileStream, eller endnu bedre ved tekstfiler, brug TStringList-objektet til at behandle tekst. Dens LoadFromFile og SaveToFile procedurer bruger også streams.
Avatar billede cybermike Nybegynder
25. april 2000 - 10:08 #4
LoadFromFile/SaveToFile er meeeeeeget mere resource krævende en AssignFile.
Ja Streams er hurtigere en standard handles som assignfile bruger. Men hvis du har Delphi 3 eller højere kan du bruge et Unit som får AssignFile til at bruge streams også.

Se delphi´s hjælp for detajler.
Avatar billede delphidaner Nybegynder
25. april 2000 - 11:41 #5
Cybermike, prøv at lave en fil som fylder f.eks. 2 MB, prøv at lave to programmer, som indlæser filen, en med File Streams, og en med AssignFile/ReadLn/CloseFile.

Jeg vil skønne at file streams tager et par sekunder, og det andet tager over en halv time!!! Du kan også prøve at gætte, hvilken en der tager flest ressourcer....

I Windows-programmering er det også mest korrekt at bruge file streams, fordi de får tildelt Windows handles.
Avatar billede sjensen Nybegynder
26. april 2000 - 11:13 #6
Mit svar gik på at få læst filerne ind i dit program, og der hvor jeg skriver "behandle data" mener jeg putte dem ned i en database. Jeg opfattede dit spm. sådan at du ville vide hvordan man kunne læse disse filer og så samle dataene et sted for senere at arbejde med dem (sammenligne, udtrække, udskrive, beregne, statitiskker, o.s.v.)

Som delphidaner og cybermike skriver er der andre muligheder for at læse filerne (der vil altid være andre muligheder og derved både fordele og ulemper ved hver).

Med din kommentar fortæller du jo netop at du vil kunne læse dataene ind i en database og så behandle dem derfra, og det er det vi hidtil har koncentreret os om. Spørgsmålet er derfor om dit spm. i virkeligheden dækker over hvordan man opretter en database, propper dataene ind i den og derefter behandler dem når der er behov for det ?

Før du kan de skal du gøre 3 ting:

1. beslutte dig for hvilken database system du vil benytte ? Paradox eller access er oplagte muligheder hvis den bare skal ligge på en lokal arbejdsplads, mens assces, Ms sql eller mysql formentligt er de valg du har hvis databasen ligger på en webserver et eller andet sted. I dette tilfælde er det jo provideren der begrænser mulighederne.

2. Definere og beskrive hvordan de data du vil læse ind er struktureret ? Er det ascii-filer eller binære filer (pascal filer f.eks.) ? er de komma- eller kolonne separerede eller hvad ?

Nå du ved hvordan filerne ser ud og hvor i den enkelte record (eller hvor på den enkelte linie) de respektive informationer er, kan du beskrive en recordstruktur du i delphi kan bruge til at dele dataene op i det der svarer til felter i en database. Herefter er du klar til at opbygge din database, d.v.s. når du ved hvilke felter der er, hvad de kan indeholde, og om datatyperne for de enkelte felter er tekst, tal, datoer o.s.v.

3. Fremstille det program der indlæser dataene fra filerne og propper dem ind i databasen. F.eks. sådan som jeg har foreslået i mit forrige svar, eller ved hjælp af filestreams sådan som delphidaner foreslår. Hvis der er en engangs indlæsning er det vist ligegyldigt hvilken løsning du vælger og jeg vil anbefale du vælger den der virker mest logisk for dig og som du føler du har kontrol over.

Er det derimod en operation der skal udføres regelmæssigt er det naturligvis vigtigt at du benytter en løsning der arbejder hurtigt, effektivt og sikkert.

Først når alle data er indlæst i en database kan du begynde at koncentrere dig om at behandle dem i forhold til hinanden. Med de databasetyper jeg omtalte ville du normalt benytte SQL-søgesprog til at "selektere" records fra de forskellige tabeller og så arbejde med disse sådan som du har tænkt på eller har ønske om.

Så kort sagt handler det p.t. om følgende:

1. beskriv datastrukturen i de filer du har til rådighed.
2. opbyg en database med tabeller og felter der afspejler den struktur du har og de behandlingsbehov du har.
3. lav det program der fylder din database op med de data du har.
4. Lav det/de programmer der sammenligner, afspiller, opdeler/samler serier o.s.v.

kan du se sammenhængen ?
Avatar billede tomaz Nybegynder
26. april 2000 - 22:07 #7
Tak for svaret Sjensen... det er en god beskrivelse af problemet... Spørgsmålet er bare hvordan jeg anvender en standard database til indlæsning samt fylder den op.. Dataene skal bare ligge i en lokal database, så Paradox er nok et udmærket valg.

nogen ideer?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester