![]() |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
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. |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
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? |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
Hilf mir kurz, was meinst du mit 2. Sektion? Meinst du die 2. /3. Spalte? |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Es geht um das hier:
Zitat:
|
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
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. |
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; |
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:
Hat mich knapp eine Stunde gekostet.
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. mfg Frank |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
|
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
|
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. |
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. |
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 |
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. |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Ist m.E. ein klassisches Freelancer Project (Ohne Grundlagen gehts halt nicht..)
Zitat:
|
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. |
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). |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
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 |
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
![]() |
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 |
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:
Dann kurz Excel anwerfen und produktiv arbeiten.
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 kannst über alles auswerten, summieren und auch jede datei einzeln betrachten und analysieren. DSP |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
Ich hatte das im Vorüberfliegen so interpretiert. Aber eben nur im Vorüberfliegen. Zitat:
Delphi-Quellcode:
Der 'else Zweig' ist nachträglich reingebaut, ansonsten ist es eine einfache Implikation, die komischerweise immer misverstanden wird. Ich hätts wissen müssen
If TheThreadErsteller.WantsTo.Make.His.(Doktorarbeit) Then
TheThreadErsteller.HasHimSelfNotReallyGoodVorbereitet := True Else Writeln('Welcome in the realität [Forschungseinrichtung ohne IT]. We help gerne'); |
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:
und den gesuchten Code ein, z. B. LK und die Funktion liefert einen Array of Word mit den passenden Werten zurückt.
GetCode('LK', 'Metastase_LK_1_1_1_R_1')
Delphi-Quellcode:
Soviel ohne genau zu wissen um was es da geht.
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; |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
|
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Zitat:
Um LK Werte zu ermitteln, rufst du
Delphi-Quellcode:
auf. Als Ergebnis bekommst du nur die Werte die zu LK gehören.
GetCode('LK', 'LK_1_1_1_R_1');
Um R Werte zu ermitteln, rufst du
Delphi-Quellcode:
auf. Als Ergebnis bekommst du die Werte die zu R gehören.
GetCode('R', 'LK_1_1_1_R_1');
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. |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
Und wenn man das Konzept für einen zeilenbasierten "Universal-Parser" weiterverfolgt, kommt vermutlich irgendwann
![]() Wobei wir wieder bei "Delphi ist vermutlich nicht das Tool für den Job" sind ... SCNR |
AW: .csv Datei einlesen, analysieren und bearbeitet abspeichern.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 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