| |
|
|
- Página 1 - |
|
KHR | ¡Hola miteinander,
.
Yo möchte una große Menge Meßdaten aufbereiten y luego como Kurve(n) darstellen. El Daten voluntad de uno Expediente eingelesen y Arrays zwischengelagert
Um stark flackernde Meßwerte en uno übersichtlichen Kurve darstellen a puede möchte Yo esta encima Durchschnittsbildung beruhigen Das todo se entonces en el fertigen Programa para fünf zahlenreihen ir
Bisher mache Yo el en algo así:
Lo son 5 arrays con 100 elementen Float-Variables , en beginn con 0 gefüllt
Ein Satz Meßwerte se eingelesen, Jedes Array erhält una Element eingetragen
Für cada Array se el Durchschnitt ermittelt,
el jeweiligen Punkte voluntad geplottet
y más es con el nächsten Datensatz Meßwerte.
Desde que bisher el Durchschnitt con mientras que-wend Schleifen errechne, se alles unendlich langsam. Selbst con Profano2cpp dauert lo Minuten a el Schirm vollgekritzelt es.
Hier veces una bastante corto Auszug el Daten como ellos vorliegen. Real haben el Archivos oft encima zehn- oder gar zwanzigtausend Datensätze (Zeilen)
25.07.2007;08:22:53;1874;63.3;0.019387;0.023140;0.024151;0.022312;-----;----- 25.07.2007;08:22:54;1871;63.3;0.028538;0.022725;0.025337;0.022793;-----;----- 25.07.2007;08:22:55;1914;63.3;0.024311;0.023610;0.022366;0.022739;-----;----- 25.07.2007;08:22:56;1889;63.3;0.021887;0.023453;0.019952;0.022303;-----;----- 25.07.2007;08:22:57;1895;63.3;0.027712;0.023644;0.021144;0.022193;-----;----- 25.07.2007;08:22:58;1902;63.3;0.023383;0.023765;0.022752;0.022195;-----;----- 25.07.2007;08:22:59;1891;63.3;0.026178;0.023538;0.022319;0.022224;-----;----- 25.07.2007;08:23:00;1912;63.3;0.024255;0.023965;0.021904;0.022195;-----;----- 25.07.2007;08:23:01;1898;63.3;0.021041;0.023673;0.024442;0.022237;-----;----- 25.07.2007;08:23:02;1895;63.3;0.024243;0.023550;0.022202;0.022322;-----;----- 25.07.2007;08:23:03;1919;63.3;0.029875;0.023874;0.022494;0.022521;-----;----- 25.07.2007;08:23:04;1930;63.3;0.027768;0.024126;0.022018;0.022461;-----;----- 25.07.2007;08:23:05;1914;63.3;0.020411;0.023905;0.020469;0.022334;-----;----- 25.07.2007;08:23:06;1915;63.3;0.027465;0.023837;0.023016;0.022474;-----;----- 25.07.2007;08:23:07;1924;63.3;0.020727;0.023959;0.023631;0.022536;-----;----- 25.07.2007;08:23:08;1891;63.3;0.020876;0.023436;0.021933;0.022374;-----;----- 25.07.2007;08:23:09;1867;63.3;0.020627;0.023159;0.020591;0.022087;-----;----- .... El ersten beiden Spalten Datum y Tiempo son uninteressant, sólo danach gehts correcto los.
Vor lauter Frust encima mi Ideenlosigkeit tener Yo el reciente Codes gelöscht Sombrero como alguien ne Concepto, como así qué más rápido ir podría??
Bin sólo desafortunadamente doch kein Programmierer pero sólo una Profano-Wurschtler. |
|
|
| Gruß Karl-Heinz WIN XP home/Pro / XPROFAN 11 / P2CPP ATMEL + BASCOM Fan | 03.06.2008 ▲ |
|
|
|
| |
|
- Página 2 - |
|
|
KHR | ¡Hola Miteinander,
.
Freut mich, Yo soviel Staub aufgewirbelt habe. Como besteht sí ne echte Chance, Yo ne Solución mein Geschwindigkeitsproblem encontrar bevor Intel una P9 con 34000facher Rechenleistung en el Markt brint.
In el TXT-Expediente son así a el 8000 Datensätze.
Im JPG es dargestellt, qué ahora con mi Programa en Darstellung rauskommt.
Dieses teilweise wirre Gekritzel möchte Yo beruhigen, así Yo ne Kurve bekommen kann.
Jede Linie es ne Datenreihe. Yo habs veces con viel Geduld probiert. Wenn Yo, el Mittelwert de 30 Datensätzen nehme, se lo ya viel mejor, pero son Fälle, como debería uno ya 100 nehmen, así al todo vernünftig abbilden kann.
Also una vez más:
Jeden el Punkte en el abgebildeten Linien möchte Yo por una Mittelwertbildung beruhigen. Jede Linie ha ca 6000 (virtuelle)Punkte, 5 Kurven son dargestellt - also müßte Yo para jede Página 30000 veces por el Mittelwertbildung ir y dazu entonces siempre el Daten correcto bereitstellen
Das beste, Yo con esta Daten en dieser Auflösung geschafft habe, waren incluso con P2CPP 3 Minuten.
Für una Bild wäre el todavía akzeptabel, si uno aber entonces weiterblättern voluntad, Será mejor que te va muy muy langweilig
Übrigens: No daß Ihr denkt, Yo möchte Euch hier libre para media Arbeitgeber einspannen. Neee Neee
Das Programa es una Tool, el Yo para mich y mi Arbeit zusammenbastele. Yo geb lo auch entonces y wann veces nem Kunden más - aber alles libre y just for fun. Como steckt kein Komerz detrás de él sólo mi Faulheit cierto Auswertungen einfacher haben a querer
.
. |
|
|
| Gruß Karl-Heinz WIN XP home/Pro / XPROFAN 11 / P2CPP ATMEL + BASCOM Fan | 04.06.2008 ▲ |
|
|
|
|
Frank Abbing |
Jede Linie es ne Datenreihe. Yo habs veces con viel Geduld probiert. Wenn Yo, el Mittelwert de 30 Datensätzen nehme, se lo ya viel mejor, pero son Fälle, como debería uno ya 100 nehmen, así al todo vernünftig abbilden kann.
Yo mache gerade Ähnliches. Aunque con weniger Werten y yo verfahre así, drei Werte a una Mittelwert zusammen a rechnen, qué para mi Zwecke ausreichend es.
Un deiner Archivos lasst se por el Listview.dll binnen weniger hundert Millisekunden einlesen. Einmal eingelesen kann ellos para jede Spalte getrennt valor aller Zeilen zusammen rechnen, sodass du ligeramente el Mittelwert forma könntest. Aber du möchstest sí sólo siempre una cierto Anzahl zusammenrechnen... como debería una neue Función her el el hecho. Andererseits wäre lo sicher mejor el todo Umrechnung sin el Umweg en Dll a hacer, como du el Werte sí sólo visuell darstellen möchtest. Das debería en Ensamblador al schnellsten posible ser, wobei el Hauptproblem el Benutzung de Fliesskommazahlen es. Hier va viel Rechenzeit perdido. Yo podría dir anbieten mich a uno Assemblerfunktion a versuchen, el du mittels XPIA oder como Dll en dein Programa einbinden könntest. El sería en etwa así aussehen:
Mediate(datenfile#, newdatas#, spalte&, anzahlmittlungsdaten&)
Rückgabewert wäre el número gebildeter Mittelwerte, el en newdatas# como Longwerte hintereinander geschrieben worden son.
Aus deinen 3 Minuten Berechnungszeit würden entonces schätzungsweise wenige (3-4) Sekunden voluntad. |
|
|
| |
|
|
|
| Mit reinem XProfan komme I 6.2 Sekunden (10652 Datensätze con jeweils 10 Spalten y en incluso dynamischen Tabellenbreite y relativ einfacher aber effektiver Glättung. (siehe Bild)
¿Te ha algo como? |
|
|
| |
|
|
|
Thomas Freier | @Franco, entonces spende uns pero por favor el Mittelwert-Función uno Spalte (max., min. y Summe haben wir sí ya). Und si posible una Función, el el número el con Werten gefüllten Items uno Spalte ermittelt. |
|
|
| |
|
|
|
| Hier el Source para Bild...
Beinhaltet una Función createHPicByStats(data$,xx,yy) y liefert una Bildhandle el Statistik zurück. El Ausgabegrösse kann por Pixel xx y yy eingestellt voluntad. Mit el Función puede ser auch a Laufzeit por String solch una Diagramm erzeugen. Im Titel es el número el benötigten Millisekunden.
Orginalcode: [...]
Ohne xpse KompilierenMarcaSeparaciónWINDOW 100,100 - 700,500
CLS $888888
var TME&=&GETTICKCOUNT
var HPIC&=CREATEHPICBYSTATS(FILE_GET_CONTENTS(fme-300-test.txt),600,420)
SETTEXT %HWND,STR$(&GETTICKCOUNT-TME&)+ ms
DRAWPIC HPIC&,10,10;0
USERMESSAGES $0014
WHILE 1
WAITINPUT
ENDWHILE
end
proc CREATEHPICBYSTATS
PARAMETERS S$,XX&,YY&
DECLARE LN$[],HDR$[],ENTI$[]
LN$[]=EXPLODE(S$+
,
)
var C&=SIZEOF(LN$[])
HDR$[]=EXPLODE(LN$[0],;)
var HDRC&=SIZEOF(HDR$[])
var F!=0
var F2!=0
DECLARE VMIN![HDRC&],VMAX![HDRC&],V![HDRC&,C&],VMM![HDRC&],COL&[IF(HDRC&>7,HDRC&,8)],COLB&[HDRC&],OLDF![HDRC&]
MAT VMIN![]=999999999999999
MAT VMAX![]=-999999999999999
DEC HDRC&
DEC C&
COL&[0]=$FF0000
COL&[1]=$00FF00
COL&[2]=$0000FF
COL&[3]=$880000
COL&[4]=$008800
COL&[5]=$000088
COL&[6]=$FF8800
COL&[7]=$00FF88
var CL&=0
WHILE 1
INC CL&
IFNOT CL&<C&
BREAK
ENDIF
ENTI$[]=EXPLODE(LN$[CL&],;)
SETSIZE ENTI$[],HDRC&+1
WHILELOOP 0,HDRC&
F!=VAL(ENTI$[&LOOP])
V![&LOOP,CL&]=F!
IF VMIN![&LOOP]>F!
VMIN![&LOOP]=F!
ENDIF
IF VMAX![&LOOP]<F!
VMAX![&LOOP]=F!
ENDIF
ENDWHILE
ENDWHILE
var I&=0
var A!=0
WHILELOOP 0,HDRC&
VMM![&LOOP]=(VMAX![&LOOP]-VMIN![&LOOP])
A!=V![&LOOP,1]
F!=VMM![&LOOP]
IF F!=0
CONTINUE
ENDIF
F2!=A!-VMIN![&LOOP]
IF F2!=0
CONTINUE
ENDIF
OLDF![&LOOP]=(F2!/F!*YY&)
ENDWHILE
var Y!=0
var HOP!=C&/XX&
var XH!=1
var YYHOP!=YY&*0.1
var X&=0
var HPIC&=CREATE(hNewPic,XX&,YY&,$FFFFFF)
STARTPAINT HPIC&
WHILE 1
INC X&
WHILELOOP 0,HDRC&
F!=VMM![&LOOP]
IFNOT F!=0
F2!=V![&LOOP,XH!]-VMIN![&LOOP]
IFNOT F2!=0
F!=(OLDF![&LOOP]*0.9)+(F2!/F!*YYHOP!)
ELSE
F!=(OLDF![&LOOP]*0.9)
ENDIF
USEPEN 0,0,COL&[&LOOP]
LINE (X&-1),(YY&-OLDF![&LOOP]) - (X&),(YY&-F!)
OLDF![&LOOP]=F!
ENDIF
ENDWHILE
XH!=XH!+HOP!
IF XH!>C&
BREAK
ENDIF
ENDWHILE
ENDPAINT
RETURN HPIC&
endproc
proc FILE_GET_CONTENTS
PARAMETERS FLE$
var B&=FILESIZE(FLE$)
IF B&<1
RETURN
ENDIF
DECLARE MEM#
DIM MEM#,B&
var R&=BLOCKREAD(FLE$,MEM#,0,B&)
var S$=CHAR$(MEM#,0,R&)
DISPOSE MEM#
RETURN S$
endproc
proc FILE_PUT_CONTENTS
PARAMETERS FLE$,S$
var L&=LEN(S$)
IF L&=0
var FH&=ASSIGN(FLE$)
REWRITE FH&
CLOSE FH&
ASSIGN FH&,
RETURN
ENDIF
DECLARE MEM#
DIM MEM#,L&+1
STRING MEM#,0=S$
BLOCKWRITE FLE$,MEM#,0,L&
DISPOSE MEM#
endproc
proc RGB.MIX
PARAMETERS COL1&,COL2&,TRANSL!
RETURN RGB(GETRVALUE(COL1&)*(1-TRANSL!)+GETRVALUE(COL2&)*(TRANSL!),GETGVALUE(COL1&)*(1-TRANSL!)+GETGVALUE(COL2&)*(TRANSL!),GETBVALUE(COL1&)*(1-TRANSL!)+GETBVALUE(COL2&)*(< TRANSL! ))
ENDPROC
end
Wenn Yo ahora bedenke el esta Método auch Spalte 1 y Spalte 2 mitberechnet (aber hier no Pagar findet) entonces podría Yo vorstellen, dass con kleiner Optimierung a diesem Punkt tal vez incluso 4 a 5 en lugar de 6,8 Sekunden erreicht voluntad puede.
@KHR: Como largo benötigt el Algo para el komplette Expediente? |
|
|
| |
|
|
|
| He typisch - en mi Notebook con 2,4GHz incluso sólo 6.2 Sekunden, en lugar de como mi DesktopPC con 3,2 GhZ 6.8 Sekunden. Sombrero todavía alguien nen 486dx4/100 herumzugammeln? |
|
|
| |
|
|
|
Thomas Freier | Ein rápidamente zusammengestrickter Test una doWhile- Bucle es auch no gerade langsam (hier sólo para 4 Reihen con Mittelwert/sec y una *.dbf) . |
|
|
| |
|
|
|
| Lo sieht así de como si Usted el Skalen no normalisierst - bekommst el todavía fix instalado?
Und para una Performancevergleich wäre lo imho nötig todos 10 Spalten a beachten. (Das macht mein Ejemplo auch, obwohl lo en Datum y Tiempo natürlich sólo 0 evaluiert y nutzt.)
Also Skalen normalisieren (x y y) y todos Spalten beachten y luego: Dauer preisgeben para Codeperformancevergleich. |
|
|
| |
|
|
|
Thomas Freier | @IF: de Zeitgründen Yo lo en 6 Werten belassen. El Hauptzeit se beim Erstellen el *.dbf verbraten. Hier wäre una Vergleich para Listview oder GridBoxen todavía interessant. El Skalierung, si yo ellos correcto hinbekommen habe, kostet ca. 300ms en uno Endzeit de 3734 ms. Auf mi Rechner mentira beide Anwendungen sicher en gleicher Höhe, si la más 4 Werte dazu kommen. |
|
|
| |
|
|
|
| Hm, algo stimmt no con el Normalisierung - el muss automáticamente determinado voluntad para jede Spalte separat. Por ejemplo hast Es usted un schwarze Linie en el Mitte, el es sozuagen no el todo Y-Spektrum adecuado. Un Umrechnung a uno einstellbaren Ausgabegröße fehlt como auch todavía drin. ^ ^ |
|
|
| |
|
|
|
Thomas Freier | @ IF: el schwarze Linie Es el Temperatur (en fme-300-test.txt es max=64.8° - min=63.9°) . En meiner Skalierung entspricht 1° = 13.9 Punkte. Más Ausschlag kommt como no fuera. Seine Temperaturanzeige va de 44° a 80°. Como hilft sólo una filigranere Grafik como en dir. War pero no mein Ziel . |
|
|
| |
|
|
|
| Yo sah grad el Yo oben el falschen Code Nuevo hatte, el fue un Vorversion.
Der Orginalcode bajo [...] war/es sin embargo el richtige.
Yo habe el sin xpse-Code oben korrigiert - ahora stimmts con Exe y Screenshot überein.
KHR hätte lo auffallen necesario. |
|
|
| |
|
|