Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   .csv Datei einlesen, analysieren und bearbeitet abspeichern. (https://www.delphipraxis.net/184749-csv-datei-einlesen-analysieren-und-bearbeitet-abspeichern.html)

Dade 2. Mai 2015 10:18

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von jobo (Beitrag 1299986)
Zitat:

Zitat von Dade (Beitrag 1299977)
Das müsste es sein. Ich hoffe sehr, dass es verständlich ist. Was meint ihr?

Dade, leider hast Du noch nicht verraten, warum das alles auf Dropbox bereitgestellt wird. Es wurde schon angemerkt, dass die Bereitschaft der Forenmitglieder dort rumzustöbern relativ gering sein dürfte. Aber das nur am Rande.

Was ich an der gesamten Anforderung nicht verstehe, ist die Maßgabe, csv Dateien in Exceldateien zu "konvertieren", damit sie mittels irgendeines Statistikprogramms untersucht / aufbereitet werden können. Was aber das "Ergebnis" des "Imports" hier scheinbar darstellt, ist bereits eine (erhebliche) Aufbereitung bzw. Auswertung der CSV Rohdaten!
Ist es so oder sehe ich das falsch?
Wenn es so ist, würde das bedeuten, dass die wissenschaftliche Arbeit auf Daten aufsetzt, die mittels der Handarbeit irgendeines Hiwis oder Forenmitglieds vorverarbeitet wurden, um es mal wertneutral auszudrücken. Es würde außerdem bedeuten, dass hier nicht von einem Import/Export die Rede ist, sondern von Datenverarbeitung bzw. Reporting, das vom Ansatz her nicht unbedingt geeignet ist, per prozeduraler Sprache umgesetzt zu werden. Was dann auch teilweise die "Komplexität" des Problems und Verwirrung allerseits erklären würde.
Vielleicht kannst Du das gedachte Vorgehen noch einmal verdeutlichen, nicht Quell und Zielformat.

Ich stelle mir das so vor (hab noch keine Doktorarbeit geschrieben):
Irgendeine arme Wurst produziert mittels Point and Click Messdaten aus tausenden von Bildern.
Das Programm spukt die Messdaten (Rohdaten) in einem etwas unpraktischen Format aus.
Alle Messdatendateien müssen nun eingelesen werden und den Dateinamen als Datenmerkmal erhalten.
Die Gesamtdaten müssen nun statistisch, wissenschaftlich aufbereitet und untersucht werden.
Dazu wird ein Statistikprogramm verwendet, das scheinbar nur Exceldaten lesen kann.
Die Aufbereitung der Daten (Plausibilisierung, Bereinigung, Analyse, Statistik) erfolgt in dem Statistikprogramm durch den Doktoranden oder einen wissenschaftlichen Mitarbeiter.

Die Aufgabe hier würde also lauten:
1500 CSV Dateien um den Dateinamen anreichern als Merkmal anreichern und zu einer Excelliste zusammenfassen.
Fertig.

Was meinst Du?



Also, das "Aufbereiten" der Quelldateien ist nur ein winzig kleiner Teil der Arbeit. Diese Daten werden nämlich mit anderen Daten verglichen, die noch gesammelt werden müssen, jedoch mit einem anderen Programm, dass die Daten ebenfalls als .csv - Datei abspeichert. Jedoch wiederum anders.
Daher muss eine der Ausgabe - CSV - Dateien dementsprechend angepasst werden. Erst danach fängt überhaupt die richtige Arbeit an.

Als Ziel soll das Tool eine csv - Datei erstellen. In EXCEL Kann dies natürlich dann importiert werden. (Ist vielleicht etwas blöd beschrieben worden)


Grundsätzlich beschreibst du genau den Ablauf.

- Ein Programm gibt, nach Markierung tausender Stellen in tausenden Bildern, eine CSV - Datei aus.
- Diese Datei kann in EXCEL importiert werden. Leider völlig falsch soritert.
- Ein Tool soll nun den Dateinamen jeder Datei mit in die csv - Datei einfügen und die Daten etwas umstrukturieren.

[wieso ihr nicht denken müsst, damit ist die Doktorarbeit erledigt]
- Alle Bilder müssen per Hand unter dem Mikroskopt gemacht werden
- Vorher natürlich die Proben von Patienten gesammelt, eingelegt, vorbereitet und geschnitten werden
- Dann erfolgt natürlich noch die Färbung
- Sichtung und Entscheidung welche Schnitte warum und wieso passend sind
( Das dauerte bis jetzt schon fast 2,5 Jahre )

- Diese Schnitte werden dann zusätzlich mit anderen Spezialprogrammen unter anderem Licht nach anderen Zellen untersucht (sehr aufwändig)
- Anschließend diese Daten mit den bestehenden kombiniert in einer noch größeren Tabelle
- Wenn das alles fertig ist, dann kommt die statistische Auswertung vom Statistiker


Ihr seht, das Sortieren dieser 1500 CSV - Dateien ist wirklich nur etwas, das per Handarbeit Monate (neben normalem Full-Time-JOB als PJ (Arzt in Ausbildung sozusagen) in der Klinik (min. 10h täglich für 300€ / Monat für ein Jahr) in Anspruch nehmen würde. Von den Fehlern ganz abgesehen.

Daher hoffe ich bitte, bitte auf eure Hilfe.

jobo 2. Mai 2015 10:46

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von Dade (Beitrag 1299988)
Als Ziel soll das Tool eine csv - Datei erstellen. In EXCEL Kann dies natürlich dann importiert werden. (Ist vielleicht etwas blöd beschrieben worden)
..

Grundsätzlich ..Ablauf.

- Ein Tool soll nun den Dateinamen jeder Datei mit in die csv - Datei einfügen und die Daten etwas umstrukturieren.

Es geht mir nicht darum, die wissenschaftliche Arbeit und Mühe in Zweifel zu ziehen. Es geht um die Anforderung, die umzusetzen ist.
Was ich in CSV sehe (> Björk) und was Du zum Zielformat Excel (?) beschreibst, hat m.E. wenig mit Import, umstrukturieren zu tun bzw. geht "etwas" darüber hinaus.
Für Dich ist das meinetwegen eine Umstrukturierung, für mich ist das bereits Analyse / Reporting und wie gesagt, nicht ohne weiteres prozedural zu implementieren respektive einfach der falsche Weg.

Zum Eingangsformat:
Vielleicht habe ich in all dem Durcheinander was übersehen, aber die CSV Daten beinhalten 2 Sektionen, wo ist insbesondere die Bedeutung der 2. Sektion beschrieben?

Dade 2. Mai 2015 10:52

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von jobo (Beitrag 1299991)
Zitat:

Zitat von Dade (Beitrag 1299988)
Als Ziel soll das Tool eine csv - Datei erstellen. In EXCEL Kann dies natürlich dann importiert werden. (Ist vielleicht etwas blöd beschrieben worden)
..

Grundsätzlich ..Ablauf.

- Ein Tool soll nun den Dateinamen jeder Datei mit in die csv - Datei einfügen und die Daten etwas umstrukturieren.

Es geht mir nicht darum, die wissenschaftliche Arbeit und Mühe in Zweifel zu ziehen. Es geht um die Anforderung, die umzusetzen ist.
Was ich in CSV sehe (> Björk) und was Du zum Zielformat Excel (?) beschreibst, hat m.E. wenig mit Import, umstrukturieren zu tun bzw. geht "etwas" darüber hinaus.
Für Dich ist das meinetwegen eine Umstrukturierung, für mich ist das bereits Analyse / Reporting und wie gesagt, nicht ohne weiteres prozedural zu implementieren respektive einfach der falsche Weg.

Zum Eingangsformat:
Vielleicht habe ich in all dem Durcheinander was übersehen, aber die CSV Daten beinhalten 2 Sektionen, wo ist insbesondere die Bedeutung der 2. Sektion beschrieben?


Hilf mir kurz, was meinst du mit 2. Sektion?
Meinst du die 2. /3. Spalte?

jobo 2. Mai 2015 11:14

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Es geht um das hier:
Zitat:

Zitat von Bjoerk (Beitrag 1299934)

Code:
Annotations;;
Name;Perimeter (µm);Area (µm2)
LK_1_1_F_1;835,4;48705,5
LK_1_1_F_2;1142,7;93813,4

...snipp...

LK_1_2;39765,9;15226633,7
LK_1_3;14272,3;7956108,4

Distance measurement annotations;;
Length (µm);;
5,15;;
3,22;;


Dade 2. Mai 2015 11:29

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von jobo (Beitrag 1300000)
Es geht um das hier:
Zitat:

Zitat von Bjoerk (Beitrag 1299934)

Code:
Annotations;;
Name;Perimeter (µm);Area (µm2)
LK_1_1_F_1;835,4;48705,5
LK_1_1_F_2;1142,7;93813,4

...snipp...

LK_1_2;39765,9;15226633,7
LK_1_3;14272,3;7956108,4

Distance measurement annotations;;
Length (µm);;
5,15;;
3,22;;



Der 2. Block mit:

Distance measurement annotations;;
Length (µm);;
5,15;;
3,22;;


Ist wichtig und sollte übernommen werden in zwei extra Spalten. Leider sind sie nicht in jeder Datei vorhanden.

Zur Not kann das auch unter den Tisch fallen. Muss halt per Hand gemacht werden.

Bjoerk 2. Mai 2015 12:43

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Deine Infos sind leider nicht ausreichend. Ich hab mir's nochmal angeschaut. Bin ja nach wie vor der Meinung, daß man das nicht Delphi machen sollte? Aber wenn du unbedingt willst. Man könnte das zum Beispiel mit meinem TGrid relativ bequem machen. Du müsstest nur das (Siehe unten) weiter ausfüllen (ggf. auch nur Pseudocode) so daß es ein Delphianer auch versteht, sonst kommen wir hier nicht weiter. :wiejetzt:
Delphi-Quellcode:
procedure AufbereitungDerLymphknotenDaten(const FileName: string; Grid: TGrid):
var
  I, J, K, Row, FollikelCount: integer;
  Csv: TCsvFile;
  Indices: array of integer;
begin
  Csv := TCsvFile.Create;
  try
    Csv.LoadFromFile(FileName);
    Grid.Clear; // Row = Zeile, Col = Spalte
    Grid.ColCount := 18;
    for I := 1 to 20 do
      for J := 1 to 20 do
        if HaveLymphknotennummer(Csv, I, J) then
        begin
          Row := Grid.AddRow; // Zeile hinzufügen
          Grid.Cells[Row, 0] := GetFallnummer(FileName);
          Grid.Cells[Row, 1] := GetLymphknotennummer(I, J);
          FollikelCount := GetFollikelCount(Csv, I, J, Indices);
          Grid.Cells[Row, 3] := IntToStr(FollikelCount);
          for K := 0 to FollikelCount - 1 do
          begin
            Row := Grid.AddRow;
            Grid.Cells[Row, 4] := IntToStr(Indices[K]);
            Grid.Cells[Row, 5] := GetPerimeter(I, J, Indices[K], Csv);
            Grid.Cells[Row, 6] := GetArea(I, J, Indices[K], Csv);
          end;
(*
5. Spalte: Keimzentren vorhanden ja=1, nein=0: Wenn irgend ein LK_X_K, LK_X_X_K, LK_X_X_X_K -> ja, sonst nein
6. Spalte: Anzahl der Keimzentren: Auftrittsanzahl der Lymphknoten mit Keimzenren (alle Lk_X_K / LK_X_X_K / LK_X_X_X_K)
7. Spalte: Anzahl der regressiven, hyalinisierten Keimzentren (RHK): Auftrittsanzahl der Lymphknoten mit RHK (alle Lk_X_K_R / LK_X_X_K_R / LK_X_X_X_K_R)
8. Spalte: Metastase: Alle VarLymph mit "Metastase" im Namen: Metastase_LK_X, Metastase_LK_X_X
9. Spalte: Umfang Metastase: Umfang der Metastase VarUmfang
10. Spalte: Fläche Metastase: Fläche der Metastase VarFläche
11. Spalte: Follikelnummer: Alle VarLymph mit F im Namen, wie LK_X_F, LK_X_X_F, LK_X_X_X_F
12. Spalte: Umfang Follikel: Umfang Follikel VarUmfang
13. Spalte: Fläche Follikel: Fläche Follikel VarFläche
14. Spalte: Keimzentrumsnummer: Alle VarLymph mit F im Namen, wie LK_X_K, LK_X_X_K, LK_X_X_X_K, LK_X_K_R, LK_X_X_K_R, LK_X_X_X_K_R
15. Spalte: Umfang Keimzentrum: Umfang Keimzentrum VarUmfang
16. Spalte: Fläche Keimzentrum: Fläche KeimzentrumVarFläche
17. Spalte: Distance measurement: Length
18. Spalte: Distance measurement: UnknownValue
*)
    end;
  finally
    Csv.Free;
  end;
end;

frankyboy1974 2. Mai 2015 13:11

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Hallo,

ich habe hier mal eine etwas ernsthaftere Lösung für dich, wobei ich das Problem ungefähr bis zur 4. Spalte gelöst habe. Den Rest darfst du dann selbst ergänzen. Ich hoffe ich habe alles richtig verstanden.

Delphi-Quellcode:
unit Unit16;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm16 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form16: TForm16;

implementation

{$R *.dfm}

procedure TForm16.Button1Click(Sender: TObject);
var
  SR: TSearchRec;
  eingangsverzeichnis, ausgangsverzeichnis: String;
  ein, aus: TStringlist;
  h, Dateiname: String;
  I: Integer;
  zaehler: Array [1 .. 50] of Integer;
  // Ich habe 50 Zaehlvariablen angelegt , sollte ausreichend sein
  keimzentren: Array [1 .. 3] of String; // ich bin von 3 LK ausgegangen
  seperator: String;
  Dateizaehler:Integer;
begin
  seperator := ';';
  Dateizaehler:=0;
  eingangsverzeichnis := 'C:\Users\Frank\Eingang\';
  // Verzeichnis in dem sich die Ursprungs-CSV Dateien befinden
  ausgangsverzeichnis := 'C:\Users\Frank\Ausgang\';
  // Verzeichnis in dem sich am Ende die aufbereiteten Dateien befinden, wird ggf. angeleget
  ein := TStringlist.Create; // Aktuelle EingabeDatei
  aus := TStringlist.Create; // Ausgabe Datei
  try
    if FindFirst(eingangsverzeichnis + '*.csv', faAnyFile, SR) = 0 then
    // Durchsucht das Eingangsverzeichnis nach alle CSV -Dateien und iteriert über die Menge
    begin
      repeat
        if (SR.Attr <> faDirectory) then
        // Es werden keine Untergeordneten Verzeichnisse mit genommen
        begin
          Dateiname := SR.Name; // Weist den aktuelle Dateiname zu
          ein.LoadFromFile(eingangsverzeichnis + Dateiname);
          // Lädt den Inhalt der aktuellen Datei in eine Stringlist
          for I := 1 to 50 do // Alle Zaehlvariablen
            zaehler[I] := 0; // werden bei einer neuen Datei mit null vorbelegt
          aus.Clear; // Ausgabedatei wird geleert
          for I := 0 to ein.Count - 1 do
          begin // Iteriert ueber die Strings in der Stringlist
            h := ein.Strings[I]; // aktuelle String wird h zugewiesen
            if pos('LK_1_1_F', h) > 0 then
              inc(zaehler[1]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_1_F' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht
            if pos('LK_1_2_F', h) > 0 then
              inc(zaehler[2]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_2_F' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht
            if pos('LK_1_2_F', h) > 0 then
              inc(zaehler[3]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_3_F' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht

            if pos('LK_1_1_K', h) > 0 then
              inc(zaehler[4]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_1_K' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht
            if pos('LK_1_2_K', h) > 0 then
              inc(zaehler[5]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_2_K' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht
            if pos('LK_1_3_K', h) > 0 then
              inc(zaehler[6]);
            // Sofern in dem aktuelle String der Teilstring 'LK_1_3_K' gefunden (>0)
            // so wird der entsprechende Zaehler um eins erhöht

            // Es werden bis hierhin die Anzahl der Keimzentren berechnet
            // Die fehlenden Spalten müssten ergänzt werden
          end;// Ende For Schleife
          // Die Datei ist jetzt durchlaufen und das Ergebnis wird in eine neue Datei geschrieben
          aus.Add('Fallnummer' + seperator + 'Lymphknoten' + seperator +
            'hier bitte die Überschriften ergänzen jeweils durch seperator getrennt');
          if zaehler[4] > 0 then
          // Sofern Zaehler[4] > Null Keimzentrenvorhanden auf 1 setzen
            keimzentren[1] := '1'
          else
            keimzentren[1] := '0'; // Ansonsten auf Null
          if zaehler[5] > 0 then
            keimzentren[2] := '1'
          else
            keimzentren[2] := '0';
          if zaehler[6] > 0 then
            keimzentren[3] := '1'
          else
            keimzentren[3] := '0';
          aus.Add(stringreplace(Dateiname, '.csv', '', [rfignorecase]) +
            seperator + 'LK_1_1' + seperator + inttostr(zaehler[1]) + seperator
            + keimzentren[1] + seperator + inttostr(zaehler[4]));
          // Diese Zeilen sind nach hinten noch zu ergänzen
          aus.Add(stringreplace(Dateiname, '.csv', '', [rfignorecase]) +
            seperator + 'LK_1_2' + seperator + inttostr(zaehler[2]) + seperator
            + keimzentren[2] + seperator + inttostr(zaehler[5]));
          // Diese Zeilen sind nach hinten noch zu ergänzen
          aus.Add(stringreplace(Dateiname, '.csv', '', [rfignorecase]) +
            seperator + 'LK_1_3' + seperator + inttostr(zaehler[3]) + seperator
            + keimzentren[3] + seperator + inttostr(zaehler[6]));
          // Diese Zeilen sind nach hinten noch zu ergänzen
          ForceDirectories(ausgangsverzeichnis);
          // Erzeugt ggf Ausgabeverzeichnis falls noch nicht vorhanden
          aus.SaveToFile(ausgangsverzeichnis + Dateiname);
          // AusgabeDatei wird im Ausgabeverzeichniss mit dem Originalnamen gespeichert
          inc(Dateizaehler);
        end;
      until FindNext(SR) <> 0;
      // Finden die nächste CSV und springt nach oben , solange noch welche vorhanden
      FindClose(SR); // Schliesst den Suchvorgang
    end;
    showmessage('Fertig! Es wurden '+inttostr(Dateizaehler)+' Dateien konvertiert.');
  finally
    ein.Free; // Stringlist wieder freigeben , ansonsten Speicherleak :-))))
    aus.Free; // Welch Katastrophe 100 Bytes reserviert und nicht wieder zu verwenden
  end;

end;

end.
Hat mich knapp eine Stunde gekostet.

mfg

Frank

jobo 2. Mai 2015 15:52

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von Dade (Beitrag 1300004)
Ist wichtig und sollte übernommen werden in zwei extra Spalten. Leider sind sie nicht in jeder Datei vorhanden.

Zur Not kann das auch unter den Tisch fallen. Muss halt per Hand gemacht werden.

Du möchtest also sowas:
SOURCEFILENAMEFOLNAME_RAWPERIMETER_NUMAREA_NUMDMANNOTATION1_NUMDMANNOTATION2_NUM 
1Lu_39893_12_1ALK_1_1_F_1835,448705,53,225,15 
2Lu_39893_12_1ALK_1_1_F_21142,793813,43,225,15 
3Lu_39893_12_1ALK_1_1_F_4811,936774,73,225,15 
4Lu_39893_12_1ALK_1_1_F_51044,460502,53,225,15 
5............ 

Bjoerk 2. Mai 2015 16:29

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Die neuen Dateien haben komplett andere Strukturen als die Rohdaten. Welche muß zuerst anhand der Infos aus "roh csv" ermittelt werden. :-D

jobo 2. Mai 2015 17:26

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Ja, das ist irgendwie schon "klar". Excel soll es ja nicht unbedingt sein, schreibt dade irgendwo. Die Quell - bzw. Transformationsbeschreibung ist nicht sehr "eingängig" bzw. unvollständig. Wie gesagt, die Daten in Dropbox nützen mir nichts. Vielleicht sind die Summierungen in Excel ja nur nice to have oder so, die Sektion 2 ist im CSV File ist ja auch irgendwie egal.
In Delphi macht es m.E. nicht soviel Sinn, die Aufbereitung umzusetzen, das ist umständlich und unflexibel.
Ich habe einfach mal einen kleinen Zwischenschritt bereitgestellt.

jobo 3. Mai 2015 10:42

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Also ich denke, man kann das mit SQL machen, auch wenn einige Dinge unklar sind.
Inhaltlich z.B. die Handhabung der "Lenght" oder irgendwelche Kommentar, die angeblich am Ende der CSV stehen.
Technisch, weiß ich nicht, ob 1500 Dateien als External eingebunden werden können, sonst muss man iterieren.
Outputformat, sollen mehre Ursprungsdateien in einem dargestellt werden oder als mehrere Ergebnisse.

Bjoerk 3. Mai 2015 11:33

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Hab mir mal das Zeugs aus der Dropbox runtergeladen. Die Auswertung soll so aussehen. Ich frage mich wie jemand das für TE machen sollte? :gruebel:
Code:
1.) Fallnummer Lymphknoten

2.) Lymphknotennummer

3.) Anzahl der Follikel

4.) Keimzentren vorhanden ja=1, nein=0

5.) Anzahl der Keimzentren

6.) Anzahl der regressiven, hyalinisierten Keimzentren

7.) Anzahl der ill defined Keimzentren

8.) Anzahl nackte Keimzentren (keine Mantelzone)

9.) Normale Keimzentren vorhanden ja=1, nein=0

10.) Viele Makrophagen im Kortex vorhanden (erst wenn mindestens 3 verschiedene Stellen, min. 40x Gesichtsfelddurchmesser groß, oder 1 Stelle 20x Gesichtsfelddurchmesser groß hiervon betroffen) ja=1, nein=0

11.) Granulome vorhanden ja=1, nein=0

12.) Metastasen vorhanden, ja=1, nein=0

13.) Mikrometastase vorhanden ja=1, nein=0

14.) Minimaldistanz Mikrometastase zu Follikel

15.) Minimaldistanz Mikrometastase zu ill defined GC

16.) Minimaldistanz Mikrometastase zu Granulom

17.) Tumor lymphozytenreich (wenn im 20er Objektiv mindestens ein zusammenhängendes Lymphozyteninfiltrat das Gesichtsfeld durchmisst)

18.) Tumor lymphozytenreich im 10er Objektiv; ja=1, nein=0

19.) Tumor lymphozytenreich-plasmazellreich

20.) Lokalisation, 1=SN, 2=LK Level 1, 3=LK Level 2,4=Level 1&2 zusammen befundet, 5= Tumor Mamma

21.) LK-Nummer

22.) Umfang LK

23.) Fläche LK

24.) Metastase

25.) Umfang Metastase

26.) Fläche Metastase

27.) Follikelnummer

28.) Umfang Follikel

29.) Fläche Follikel

30.) Keimzentrumsnummer

31.) Umfang Keimzentrum

32.) Fläche Keimzentrum

33.) Nacktes Keimzentrum -Nummer

34.) Umfang nacktes Keimzentrum

35.) Fläche nacktes Keimzentrum

36.) Besonderheiten/Kommentare

jobo 3. Mai 2015 11:37

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Ah, schon mal die Überschriften! :)
Also ich würde es mit Oracle unter Nutzung der "external tables" machen.
Die Zählerei- /Existenzwerte sollten damit kein Problem sein.

Bjoerk 3. Mai 2015 13:09

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Ist m.E. ein klassisches Freelancer Project (Ohne Grundlagen gehts halt nicht..)
Zitat:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
uses
  FileCtrl;
  ..
Damit bekomme ich bestimmt keine .exe.
Was mache ich falsch?

Dejan Vu 4. Mai 2015 07:16

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Also, *wenn* das eine Doktorarbeit sein soll, dann würde ich mal sagen: Durchgefallen. Setzen. Sechs.

Denn zu einer Doktorarbeit (und zu akademischer Arbeit, ach was sag ich, Arbeit allgemein) gehört auch Planung, und wenn man sich das hier anschaut, dann fehlt das komplett, zumindest was die Auswertung anbelangt. So frei nach dem Motto: Erstmal sammeln, fürs Auswerten findet sich schon ein Dummer.

Und später wirst Du dann den Bauch des Patienten öffnen, aber beim wieder-zunähen einen Hilferuf im Ärzteforum posten?

Und falls Dir das alles bewusst ist, dann lass mal die Hosen runter und biete einen Preis dafür, das man Dir deinen Doktortitel rettet. Und dieser Preis (ich würde ja nach tageweise nach Aufwand abrechnen) ist immer noch viel zu niedrig, im Vergleich für den Gegenwert (akademischer Abschluss).

Ich war mal einer der Dumpfköppe, die als Hiwi für so eine Doktorarbeit Daten eingetrommelt hat. Wir kamen uns zwar irgendwie ausgenutzt vor, aber der Deal war ok: Wir wollten einen Schein und er wollte seine Doktorarbeit (bzw. die Daten). Ausgewertet hat er das übrigens selbst, weil Teil seines Plans das Format der Exceltabellen war: Er hatte sich vorher überlegt, wie wir die Daten in Excel ablegen sollen, sodass er mit moderatem Aufwand auswerten kann.

jobo 4. Mai 2015 07:53

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Vielleicht schießt Du da etwas übers Ziel hinaus.
Es ist nicht seine Doktorarbeit. Eine Bildauswertungs -vermessungssoftware ist jetzt auch nicht unbedingt etwas, was man wie eine Textverarbeitung mal eben irgendwo herbekommt oder tauscht, ebenso die Statistiksoftware. Ich habe noch nie mit sowas gearbeitet, keine Ahnung was solche Systeme leisten könn(t)en.

Ja, die Herangehensweise ist fragwürdig, sicher kann man das alles planen und ja, vielleicht muss da jetzt ein Profi ran oder ein Märtyrer im Dienste der Wissenschaft. Da der TE nicht mehr postet, gehe ich sowieso davon aus, dass der Drops gelutscht ist (durch einen Profi, einen Selbstausbeuter oder was auch immer)
Und ohne die Details zu kennen, Excel würde ich nun auch nicht unbedingt einen Plan nennen (also vielleicht, aber höchstens beim A-Team).

p80286 4. Mai 2015 10:40

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von Dejan Vu (Beitrag 1300131)
Ausgewertet hat er das übrigens selbst, weil Teil seines Plans das Format der Exceltabellen war: Er hatte sich vorher überlegt, wie wir die Daten in Excel ablegen sollen, sodass er mit moderatem Aufwand auswerten kann.

Da scheint "Dein Doktor" die Grundlagen zumindestens verstanden zu haben.
Ich habe vor vielen Jahren Medizinern statistisch unter die Arme gegriffen (das war in der VorExcelZeit) seitdem weiß ich, daß sich Kreativität und Statistik nicht ausschließen.

Gruß
K-H

Bjoerk 4. Mai 2015 10:41

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Dejan Vu, das ist nun wirklich Quark. Ein Mediziner weiß normalerweise nicht mal was eine csv Datei ist? BTW, meine Schwester hat für ihre Doktorarbeit 10 Jahre gebraucht. Ihr Doktorvater regte an daraus ein Buch zu machen. Nochmal weitere 2 Jahre für das Buchlayout. Ist heute in Fachkreisen übrigens ein Besteller. Sie hat ihre Daten mit SPSS verwaltet und ausgewertet, deshalb mein Hinweis an TE.

p80286 4. Mai 2015 10:50

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
@Bjoerk
Es gibt sonne und sonne

Und die einen segeln im Windschatten der anderen.

Gruß
K-H

DSP 4. Mai 2015 16:37

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Ich würde einen anderen Ansatz wählen :-D

Alle Dateien einlesen, Zeilen durchnummerieren, ein Count dazu und dann zusammen als .csv speichern. Das ganze dann nach Excel als .csv importieren, ein Pivot draus machen und dann auswerten wie man lustig ist :P

Code in etwa so:
Delphi-Quellcode:
 1 --> count
 clear itab!
 for each <dateinahme> do
  for each line in <dateinahme>
   newline := <dateinahme>;<count>;1;<line>
   add newline to itab!
   inc count
 save itab as csv
Dann kurz Excel anwerfen und produktiv arbeiten.

Dann kannst über alles auswerten, summieren und auch jede datei einzeln betrachten und analysieren.

DSP

Dejan Vu 4. Mai 2015 19:18

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von jobo (Beitrag 1300137)
Vielleicht schießt Du da etwas übers Ziel hinaus.
Es ist nicht seine Doktorarbeit....

Deswegen: *WENN*, also: IF---THEN ;-)

Ich hatte das im Vorüberfliegen so interpretiert. Aber eben nur im Vorüberfliegen.
Zitat:

Zitat von Bjoerk (Beitrag 1300154)
Dejan Vu, das ist nun wirklich Quark. Ein Mediziner weiß normalerweise nicht mal was eine csv Datei ist? ...

Nein Nein. Falsch verstanden: Hier nochmal

Delphi-Quellcode:
If TheThreadErsteller.WantsTo.Make.His.(Doktorarbeit) Then
  TheThreadErsteller.HasHimSelfNotReallyGoodVorbereitet := True
Else
  Writeln('Welcome in the realität [Forschungseinrichtung ohne IT]. We help gerne');
Der 'else Zweig' ist nachträglich reingebaut, ansonsten ist es eine einfache Implikation, die komischerweise immer misverstanden wird. Ich hätts wissen müssen

Popov 4. Mai 2015 19:44

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Ich hab eine Art Universal-Parser für Texte wie z. B. Metastase_LK_1_1_1_R_1 geschrieben. Man gibt nur
Delphi-Quellcode:
GetCode('LK', 'Metastase_LK_1_1_1_R_1')
und den gesuchten Code ein, z. B. LK und die Funktion liefert einen Array of Word mit den passenden Werten zurückt.

Delphi-Quellcode:
type
  TCodeW = array of Word;

  TCode = record
    CodeS: string;
    CodeW: TCodeW;
    Count: Integer;
    CodeSExists: Boolean;
  end;

function GetCode(ACodeS, AText: string): TCode;

  function GetNum(var s: string): Integer;
  var
    sTemp: string;
  begin
    while (Length(s) > 0) and not (s[1] in ['0'..'9']) do
      Delete(s, 1, 1);

    sTemp := '';
    while (Length(s) > 0) and (s[1] in ['0'..'9']) do
    begin
      sTemp := sTemp + s[1];
      Delete(s, 1, 1);
    end;

    if Length(sTemp) > 0 then
      Result := StrToInt(sTemp)
    else
      Result := -1;
  end;

var
  i, p: Integer;
  w: Integer;
  sTemp: String;
begin
  with Result do
  begin
    CodeS := AnsiUpperCase(ACodeS);
    SetLength(CodeW, 0);
    Count := 0;
    CodeSExists := False;

    //Evtl. ist es besser nach CodeS + '_' zu suchen, falls immer ein '_' folgt.
    p := Pos(CodeS, AnsiUpperCase(AText));
    //p := Pos(CodeS + '_', AnsiUpperCase(AText));
    CodeSExists := p > 0;
    if not CodeSExists then
      Exit;

    sTemp := '';
    for i := p + Length(CodeS) to Length(AText) do
      if AText[i] in ['0'..'9', '_'] then
        sTemp := sTemp + AText[i]
      else
        Break;

    repeat
      w := GetNum(sTemp);
      if w > - 1 then
      begin
        Inc(Count);
        SetLength(CodeW, Count);
        CodeW[Count - 1] := w;
      end;
    until w < 0;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Code: TCode;
  i: Integer;
begin
  Code := GetCode('L', 'Metastase_LK_1_1_1_R_1');

  ShowMessage('Gesuchter Code: ' + Code.CodeS);
  if Code.CodeSExists then
    ShowMessage('Text "' + Code.CodeS + '" ist im String vorhanden')
  else
    ShowMessage('Text "' + Code.CodeS + '" ist im String nicht vorhanden');
  ShowMessage('Anzahl: ' + IntToStr(Code.Count));
  for i := 0 to Code.Count - 1 do
    ShowMessage('Wert: ' + IntToStr(i + 1) + ' = ' + IntToStr(Code.CodeW[i]));
end;
Soviel ohne genau zu wissen um was es da geht.

Bjoerk 4. Mai 2015 20:50

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von Popov (Beitrag 1300222)
Ich hab eine Art Universal-Parser für Texte wie z. B. Metastase_LK_1_1_1_R_1 geschrieben. [..]

Toller "Universalparser"? Macht aus Metastase_LK_1_1_1_R_1 LK 1 1 1. Das R1 kommt gar nicht mehr vor? Besser wäre hier einfach eine Splitsting mit _ als Delimiter. :wink:

Popov 4. Mai 2015 21:31

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Zitat:

Zitat von Bjoerk (Beitrag 1300225)
Toller "Universalparser"? Macht aus Metastase_LK_1_1_1_R_1 LK 1 1 1. Das R1 kommt gar nicht mehr vor?

Das hast du richtig erkannt. Das ist Absicht.

Um LK Werte zu ermitteln, rufst du
Delphi-Quellcode:
GetCode('LK', 'LK_1_1_1_R_1');
auf. Als Ergebnis bekommst du nur die Werte die zu LK gehören.

Um R Werte zu ermitteln, rufst du
Delphi-Quellcode:
GetCode('R', 'LK_1_1_1_R_1');
auf. Als Ergebnis bekommst du die Werte die zu R gehören.

Du bekommst also nicht alles in einem Rutsch gesplittet zurück, sondern immer nur die Werte zu dem gesuchten Parameter gehören. Du musst in einer Routine also alles abrufen. Willst du die Werte zu LK wissen, rufst du die Funktion mit LK auf, bei R zu R, usw.

Aber mir ist noch eine kleine Idee dazugekommen.

BUG 4. Mai 2015 21:53

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Und wenn man das Konzept für einen zeilenbasierten "Universal-Parser" weiterverfolgt, kommt vermutlich irgendwann AWK raus :mrgreen:
Wobei wir wieder bei "Delphi ist vermutlich nicht das Tool für den Job" sind ... SCNR

blondervolker 4. Mai 2015 23:05

AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
 
Guten Abend,

vielleicht wäre das ja was:
https://www.tmssoftware.com/site/asg65.asp


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.
Seite 2 von 2     12   

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