AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mittelwert und Standardabweichung

Ein Thema von Hobbyprogrammierer · begonnen am 21. Apr 2006 · letzter Beitrag vom 27. Apr 2006
Antwort Antwort
Seite 1 von 3  1 23      
Hobbyprogrammierer

Registriert seit: 4. Dez 2005
Ort: Berlin
24 Beiträge
 
#1

Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 22:41
Hallo an alle,

ich benötige Hilfe. Und zwar vorerst zur Mittelwertbildung. Ich habe Textdateien die immer folgend aufgebaut sind: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx...
Die x'e stehen nur für Zahlen und zwar für ein bis dreistellige. Bei Einstelligen halt mit 3 Leerzeichen, bei Zweistelligen mit 2 und so weiter...
Ich lese die 4er Blöcke jetzt mit folgender Routine in ein Array ein:


Delphi-Quellcode:
var f: file;
    i: Byte;
    A: Array[1..4] of char;

begin
  memo1.Lines.Clear;
  opendialog1.Execute;
  assignfile(f, opendialog1.FileName);
  reset(F, 1);
    for i:= 1 to 5 do
      begin
        blockread(f, a[1], sizeof(a));
        memo1.Lines.add(a);
      end;
  closefile(f);
end;
Aus diesen 5 Werten brauche ich jetzt den Mittelwert. Leider funktioniert das mit mean(Array) nicht, da ich kein Array of Double habe. Und das habe ich nicht, weil irgendwie ständig die Leerzeichen gestört haben. Gibts da noch einen anderen Weg, als die komplette Gleichung in eine Funktion zu schreiben? (Beim Mittelwert gehts ja noch, aber bei der Standardabweichung wirds schon schwieriger)






Danke

[edit=alcaeus]delphi-tags eingefuegt. In Zukunft bitte selbst machen. Mfg, alcaeus[/edit]
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#2

Re: Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 22:51
Es gibt da so eine Prozedur namens Val(string, variable, code) mit der man aus einen String eine Zahl machen kann...nur weiß ich nicht ob der mit den Leerzeichen zurechtkommt.
Wenn nicht, gibt es die Funktion Trim(string) die die Leerzeichen wegschneidet.


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Hobbyprogrammierer

Registriert seit: 4. Dez 2005
Ort: Berlin
24 Beiträge
 
#3

Re: Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 22:54
Die Version das ganze in Strings zu wandeln, die Leerzeichen wegzuschneiden und anschliessend wieder Integer daraus zu machen um zu rechnen hatte ich auch schon. Problem ist nur, dass ich von diesen 4er Blöcken im Schnitt zwischen 5 und 8 Mio. in einer Textdatei habe. Das dauert ewig. Aber danke trotzdem!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 23:01
Hallo,

das Aufteilen der Zeilen könntest Du mit einer Stringliste durchführen:

Delphi-Quellcode:
List := TStringList.Create;
try
  List.Delimiter := ' ';
  List.DelimitedText := ' 1 4 199 55';
    
  // hier die Liste verarbeiten
    
finally
  List.Free;
end;
Nach der Zuweisung zu DelimitedText stehen die einzelnen Werte als String(!) in der Liste und können über einen ganzzahligen Index ausgelesen werden.

Gruß Hawkeye
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#5

Re: Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 23:05
Vorschlag: Du lagerst die Blöcke nicht in Arrays of Char, sondern, komplett gesehen, in einem Array of String, was ja fast das gleiche ist ...
Aber, du analysierst beim einlesen gleich, ob das Zeichen ein ' ' ist, wenn ja, schreibst dus einfach nicht in den String ...

Pseudocode:

Delphi-Quellcode:
var strings : array of string;
i := 0;
setlength(strings,1,1);
repeat
 blockread(datei, buf, 1);
 if buf <> ' then
  begin
  setlength(strings,length(strings+1);
  setlength(strings[i],length(strings[i]+1);
  strings[i,c] := buf;
  inc(c);
  end else
  begin
  inc(i);
  c := 1;
  end;
 until eof(datei);
Dann hast du ein dynamisches Array mit allen String-Ketten, die du dann einfach per StrToInt umwandeln kannst.

mfG

Markus

EDIT: Danke roter Kasten, ich habs gesehen ... eine Anmerkung, mein Code verhindert das auftreten von Leerzeichen in den Strings von Anfang an, das erspart eine Performanceaufwändige, doppelte Berarbeitung der Strings.
Was evtl. Leistung frisst, ist das ständige setlength();, da evtl. jedes Mal Speicher alloziiert wird (schreibt man das so?). Man könnte im Voraus eine Länge von z.B.5 für einen Teilstring und 1000 für das Dynamsiche Array verlangen und bei überschreitung dieser Grenze dann einen weiteren Packen drauflegen.
Am Ende wird geprüft, welche Strings nicht enthalten und diese werden dann rausgeschnitten.

EDIT2: Noch was ... auch wenns auf den ersten Blick schwieriger scheint ... du färst mit TFileStreams und TMemoryStreams besser als mit Files ... such mal danach!
Markus
  Mit Zitat antworten Zitat
Hobbyprogrammierer

Registriert seit: 4. Dez 2005
Ort: Berlin
24 Beiträge
 
#6

Re: Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 23:09
Ahaa?!

Das kenne ich noch nicht. Hab ich das jetzt auch richtig verstanden? Eine Stringlist und das Array komplett weglassen?

Ich werd mir da jetzt mal was zusammensuchen. Danke erstmal!

Uh, noch eine Antwort. Ihr seid super!
  Mit Zitat antworten Zitat
Hobbyprogrammierer

Registriert seit: 4. Dez 2005
Ort: Berlin
24 Beiträge
 
#7

Re: Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 23:16
Ja die TFilestreams hab ich mir auch schon angesehen und erstmal nicht durchgesehen. Aber ich werd sie mir dann wohl doch nochmal zu Gemüte führen.

Danke an alle für die schnellen Lösungen!
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#8

Re: Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 23:18
Was ist denn das fuer ne File bei 8 Mio. von solchen Eintraegen?
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Hobbyprogrammierer

Registriert seit: 4. Dez 2005
Ort: Berlin
24 Beiträge
 
#9

Re: Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 23:22
Das sind Messdaten von gepulsten Lasern. Und da diese von Dauertests stammen, sind das streckenweise auch 60Mio Einzeldaten. Und bei der Menge gibt auch Excel auf mit Mittelwert und Standardabweichungsberechnungen.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Mittelwert und Standardabweichung

  Alt 21. Apr 2006, 23:34
Hier noch eine Versuch (nur grob getestet):

Delphi-Quellcode:
var Numbers: array of integer;

procedure Parser (const aText: string);

  var p : PChar;
      Count : Integer;
      Value : Integer;
      
begin

  // Zeiger auf das erste Zeichen setzen
  p := PChar(aText);

  // Anzahl Werte im Feld initialisieren
  Count := 0;

  // alle Zeichen des Strings verarbeiten
  while (p^ <> #0) do

    // ist es eine Ziffer?
    if (p^ in ['0'..'9']) then
      begin

        // ja: Zahl komplett einlesen
        Value := 0;
        while (p^ in ['0'..'9']) do
          begin
            Value := 10 * Value + Ord(p^) - Ord('0');
            Inc (p);
          end;

        // Feld bei Bedarf vergrößern
        if (Count = Length(Numbers)) then
          SetLength (Numbers, Count + 1024);

        // Zahl ablegen und zählen
        Numbers[Count] := Value;
        Inc (Count);

      end
    else

      // andere Zeichen überlesen
      Inc (p);

  // unbenutzte Feldelemente abschneiden
  SetLength (Numbers, Count);

end;
Der Parser scannt den übergebenen Text und trägt alle gefundenen (positiven, ganzzahligen!) Werte in das Feld Numbers ein. Du kannst ihm einzelne Zeilen oder den kompletten Inhalt der Datei (als String) übergeben.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz