![]() |
Datei auswerten
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
zuersteinmal muss ich vorwarnen, das es durchaus möglich ist, das ich das gewünschte Porgramm komplett hier entwickeln lasse, da meine bisherigen Kenntnisse kaum ausreichen werden. Ich habe eine Datei, die ausgewertet werden soll. alle Werte darin sind Tab-getrennt abspeichert. Nun soll diese Datei geöffnet werden (das bekomm ich wohl noch hin). Das Delphi das E-Format der Zahlen versteht kann ich auch schon sagen. Nun wird aber haarig. Die Spalten mit den Überschiftn MFG1.POWER, MFG1.POWERA, MFG1.POWERB müssen darauf überprüft werden, ob in allen drei Spalten die Werte über zehn liegen, hinzu kommt, das dazu auch überprüft wird in wievielen zusammenhängenden Zeilen dem so ist. Wenn die Zeilen bekannt sind, soll in allen Spalten in den betreffenden Zeilen die Standardabweichung und der Mittelwert berechnet werden. Zusätzlich wär es schön. wenn die Ergebnisse in einer neuen Datei gespeichert werdem, das muß aber nicht. Eigentlich sollte diese Auswertung kein Problem sein, aber ich hab keine Ahnung. Könnt Ihr mir da helfen? Danke motu |
Re: Datei auswerten
ich würde alle zeilen, außer die überschriften in ein array laden und dann anschließend für jedes gewünschte ergenis ne funktion schreiben... ist eigentlich easy. wo ist genau dein problem?
|
Re: Datei auswerten
Zitat:
Es fängt schon damit an, das ich erstmal rausfinden muss, wie ich das alles in ein Array bekomme, dann wie ich das ganze Parse und dann wie ich aus MeanAndStdDev die einzelnen Ergebnisse bekomme. Ich beschäftige mich erst seit kurzem mit Delphi und bisher bin ich gut mit meinen Kenntnisse in den Bereichen: Form zusammenklicken, Objektinspektor nutzen, Eigenschaften oder Werte zuweisen zurecht gekommen - soweit zu meinem Kenntnissstand. Danke schonmal an alle die helfen möchten [edit] da warick wohl zu hecktisch an de Tastatur [/edit] |
Re: Datei auswerten
Icg brauch' einen dynamischen Array, in Größe der Datei aber wie bekomm' ich die Zeilen- und Spaltenanzahl aus meiner Datei?
|
Re: Datei auswerten
Hi,
ich würde das ganze in Excel importieren, dann hast du schon mal alles schön sauber in Spalten und Zeilen. Von Delphi aus würde ich dann per ADO auf die Excel-Datei zugreifen, und mir die Bedingungen, die du angegeben hast, in eine entsprechende SQL Anweisung formen, und schon hast du dein Ergebis als Recordset. Ist aber nur so ne Idee von mir. Gruß, Tom |
Re: Datei auswerten
Zitat:
Mir ist's egal, wichtig ist mir nur entweder Excel oder Delphi, nur nicht beides. Bei beidem habe ich den selben Aufwand mir neues Wissen anzueignen. motu |
Re: Datei auswerten
meiner meinung nach total umständig über excel zu gehen und das bringt auch nix
|
Re: Datei auswerten
Hallo Motu,
ich bezweifle, dass du das Programm hier entwickeln lassen kannst. Du bist lange genug dabei, um zu wissen, dass wir nur Hilfe zur Selbsthilfe leisten. Ich würde die Datei Zeilenweise über ein TextFile einlesen und mir dann eine Procedure
Delphi-Quellcode:
schreiben, die das n-te Feld aus der Zeile holt.
procedure HoleFeld(zeile: String; n: Integer);
Versuche das doch einmal hinzubekommen, dann ist es wirklich nicht mehr schwer. ... und wenn es nicht weiter geht, hast du ja uns :mrgreen: |
Re: Datei auswerten
Zitat:
Code:
Das scheint aber nicht so gut zu sein, da mein Rechner die Ganze Pause bei 100% CPU-Last lief und raus kam nix. hab letztendlich das Programm abgeschossen. Als Datei habe ich die Bsp. Datei genommen.
AssignFile(LogDatei, Opendialog1.FileName);
Reset(Logdatei); while not Eof(Logdatei) do begin Read(logdatei, line); alles := alles + line; end; |
Re: Datei auswerten
:wall:
Code:
ein readln schafft abhilfe. :oops:
AssignFile(LogDatei, Opendialog1.FileName);
Reset(Logdatei); while not Eof(Logdatei) do begin Read(logdatei, line); alles := alles + line; end; |
Re: Datei auswerten
Zitat:
Delphi-Quellcode:
Bekomm ich immer nen Typen konflikt. :wall:
ResDatei: TextFile;
... Readln(Logdatei, Resdatei); wie sagt ich dann Delphi das es in ganz bestimmten Spalten suchen soll? |
Re: Datei auswerten
Hallo Motu,
versuch's mal so:
Delphi-Quellcode:
var
line: String; LogDatei: Textfile; begin AssignFile(LogDatei, Opendialog1.FileName); Reset(Logdatei); while not Eof(Logdatei) do begin Readln(logdatei, line); LineAuswerten(line) end; end; |
Re: Datei auswerten
Zitat:
|
Re: Datei auswerten
Zitat:
|
Re: Datei auswerten
Zitat:
|
Re: Datei auswerten
Wieso machst du das nicht gleich während des auslesens? Zur Berechnung brauchst du doch immer nu die 3 Zahlen einer Zeile? Dann gibt es keinen Grund den Speicher damit vollzuhauen.
|
Re: Datei auswerten
Zitat:
|
Re: Datei auswerten
Hallo Motu,
wenn du die Datei zeilenweise einliest, musst du die Zeile in ihre Bestandteile zerlegen. Dafür hatte ich die Prozedur vorgeschlagen. Besser wäre sogar eine Function:
Delphi-Quellcode:
Wenn du dann die Felder hast (als String), kannst du diese umwandeln in z.B. Extended Values. Diese kannst du dann auswerten oder in ein Array schreiben und dann weiterverarbeiten. Der nächste Schritt ist aber die Zerlegung einer Zeile, das sogenannte Parsen.
function HoleFeld(zeile: String; n: Integer): String;
|
Re: Datei auswerten
du kannst sie DIREKT auswerten, und dann nur den mittelwert in nem array speichern, oder sogar den direkt in ne datei schreiben...
so in etwa:
Delphi-Quellcode:
dein holzeile:
while not eof(logdatei)do
begin holzeile(temp); wertezeileaus(temp); end;
Delphi-Quellcode:
dann dein wertezeileaus:
readln(datei,temp);
result:=temp;
Delphi-Quellcode:
so, temp isn string, teil1-3 auch
zerlegezeile(line, teil1, teil2, teil3);
if (strtoint(teil)>10) and (strtoint(tei3)>10) and (strtoint(tei3)>10) then begin mittelwerte[anzahl+1]:=(strtoint(teil)+strtoint(tei2)+strtoint(tei3))/3; anzahl:=anzahl+1; end; mittelwerte isn array of double/extended/was auch immer anzahl die anzahl der mittelwerte -> integer der rest is deine aufgabe, zb zerlegezeile |
Re: Datei auswerten
Danke für den Code. :)
Zitat:
Ist jetzt vielleicht klar, was ich überhaupt machen möchte? :? |
Re: Datei auswerten
Wenn man keene Ahnung hat kann det ja jarnischt wern. :wall:
Ich war immer drauf aus, die Datei in ein Array zu werfen und dann zu parsen. Dabei muß ich erst parsen und dann werfen. Naja dazu bin ick hier. Ich probiers mal mit nem Codeschnipsel, den ich gefunden habe. Wenn ich da was nicht hinkriege, meld ich mich wieder. Danke an alle die mir Zeit und Geduld opfern. |
Re: Datei auswerten
Jetzt hab ich erstmal meine Daten im Array. :-D
Jetzt muß ich meine Spalten überprüfen ich dachte an:
Delphi-Quellcode:
So.
for i:=0 to m do //m - Zeilenanzahl
begin if (data[17,i] > 10) and (data[18,i] > 10) and (data[19,i] > 10) then IrgendEinSpeicher := m; end; Problem 2: Was nehm ich dem am besten für einen Speicher um meine Zeilennummern zu merken? Problem 3: Wie überprüf' ich, ob die Zeilennummern ein zusammenhängende Zahlenfolge sind? :gruebel: edit: einige Sachen schon selbst rausgefunden Wär es nicht auch gleich möglich, wenn ich die Zeilenummer habe, Werte der Spalten in eine Liste zu speichern? Wenn sie Zeilennummer springt, wird eine neue Liste begonnen. Meine Liste kann ich dann an meine Funktionen übergeben |
Re: Datei auswerten
Hallo Motu,
ich möchte die etwas korrigieren Zitat:
Zum Fachlichen deines Beitrags: (in den vorherigen Beträgen wurde dazu bereits Source Code beschrieben) 1) Öffne die Datei mit AssignFile(filevar, dateiname) und Reset(filevar). 2) Lese die Daten mit Readln(filevar, stringbuffer) ein. 3) Lese jede Spalte mit seinem Feld ein und konvertieren die Stringabbildungen in Real-Zahlen. 4) Speichere die Zahlen jeder Zeile in ein eigenes Objekt mit dem Namen "TMessdaten". Das Objekt enthält als Objekteigenschaften und damit lokale Variablen die jeweiligen Spalten deiner Datei als Realzahlen.
Delphi-Quellcode:
5) Speichere das Objekt mit dem TList-Objekt der VCL in einer internen Liste ab.
TMessdaten = class(object)
private ...F_spaltennamen: Real; public property ...spaltennamen: Real read F_spaltennamen write F_spaltennamen end;
Delphi-Quellcode:
6) Am Ende der Datei, schließe die Datei mit CloseFile(filevar).
FList := TList.Create;
repeat ...zeile aus datei einlesen... FMessdatenzeile := TMessagen.Create; FList.Add(FMessdatenzeile); FMessdatenzeile.spaltenname := StringInZahl(HoleZahlEinerSpalte(eingeleseneZeile)); until EOF(filevar); ...nun daten mit der internen darstellung beliebig bearbeiten... for i := 0 to FList.Count-1 do begin TMessdaten(FList.Item[i]).spaltenname .... berechnen, verrechnen etc. .... end; Nun kannst du die Daten in deiner internen Liste, die pro Eintrag nun deine Zahlen einer Zeile enthält schnell und einfach bearbeiten. Grüße Kay |
Re: Datei auswerten
Also mein Array ist voll, die Datei auch schon wieder zu.
nun habe ich folgenden Idee:
Delphi-Quellcode:
Jetzt besteht das Problem, das die erste Zeile mit Werten nicht beachtet wird und ich hab grad keine Idee, wie ich, sobald ein neuer Wertblock anfängt, eine neue Liste beginne. Ich könnte ja in jedem Else-Fall den Listenindikator um eins erhöhen. dann haben alle zusammenhörenden Liste den gleich Indikator. Es ist doch bestimmt möglich leere Liste einfach wegfallen zulassen und die bestehenden einfach neu durchzunummerieren.
if (data[17,i]>10) and (data[18,i]>10) and (data[19,i]>10) then
if saveint=i-1 then // jeden werte einer spalte dieser Zeil in eine eigene liste saveint:=i; else saveint:=i; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz