Betrifft:
DELPHI 5
Hi,
VORGESCHICHTE:
eine Freundin von mir hat für eine Studie Versuche mit diversen Programmen und Verfahren durchgeführt und diese Ergebnisse mit Programmen wie u.a. SPSS, Excel, usw. bearbeitet.
Doch leider ist es zum Gau gekommen, da sie mehrere OriginalDateien überschrieben hat. (dauert jetzt zu lange das detailliert zu erklären).
Die Daten sind zwar glücklicherweise noch einmal vorhanden, allerdings quer in 1 Datei verwurstet.
PROBLEM:
Jetzt hab ich ihr versprochen, ich würde ihr dabei helfen.
Und hab versucht ein Programm zu entwickeln, das nach Zeichen sucht und diese Daten extrahieren oder zumindest erstmal trennen kann.
Dabei soll bei Auftreten von 3 Zeichenkombinationen wie folgend verfahren werden: (für mich sind es nachher noch mehr, aber wenigstens die schon mal ..)
- X01 soll durch den String ' Typ A: ' (steht für Fragetyp A) ersetzt werden
- 01 steht für ' Typ B: ' (für Fragetyp B)
- die Datenseparator (Komma ',') sollen, falls sie mehrfach vorkommen durch ein einzelnes Vorkommen ersetzt werden
Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
var Rest, s, TEX: string;
Menge, Laenge, i: Integer;
begin
// Beispielkette
S := '2,9,0171,,25,01640X0174,01747,23,,,,47X014747'; //
S := '0,,25,01640X0174,01747,23,,,,47X014747'; // vorne gekürzte Kette bringt wieder andere Ergebnisse
laenge := length(s);
i := 0;
Menge := 0;
while i < laenge do
begin
inc(i);
if (s[i] = 'X') and (s[i + 1] = '0') then // -> x0
begin
if (s[i + 2] = '1') then // -> wenn X01
if Menge > 0 then
begin
TEX := TEX + ',' + ' Typ: A ';
Menge := 0;
end
else
TEX := TEX + ' Typ: A ';
inc(i);
end
else ////////////////////////////////////
if (s[i] = '0') and (s[i + 1] = '1') then // -> normaler 01
begin
if Menge > 0 then
begin
TEX := TEX + ' Typ: B '; // Antworttyp
Menge := 0;
end
else TEX := TEX + ',' + ' Typ: B '; // Antworttyp B
inc(i);
end
else ////////////////////////////////////
if (s[i] = ',') then // DOPPELTE Trenner finden
begin
inc(Menge);
end
else ////////////////////////////////////
if Menge > 0 then
begin
Caption := s[i];
if Menge = 1 then
TEX := TEX + ',' + s[i]
else
TEX := TEX + s[i];
Menge := 0;
end
else
// alles andere
TEX := TEX + s[i]; // alle anderen Zeichen
end; // END WHILE
Memo2.text := TEX;
Memo1.text := S;
end; // Ende Buttonfunktion
Ich hab jetzt seit Freitag immer wieder rumprobiert und mit mehreren Zeichenketten [s.o.] versucht.
Jedes Mal kamen andere, neue Verluste von Zeichen heraus.
Aus der folgenden Zeichenkette z.B.
0,,25,01640X0174,01747,23,,,,47X014747
025 Typ: B 640 Typ: A174 Typ: B 747,2347 Typ: A 14747
kommt ^^ => d.h.
(1. Doppelkomma => verschwindet ganz,
Komma nach der 25 ist auch weg
aus X01 wird aber die 1 dennoch übernommen
Komma verschwindet, usw.) - aber das ist ja nicht richtig!
Ich hab zwar jetzt an so vielen Stellen herumgeschraubt und verbessert,
aber es will nicht komplett gelingen.
Sieht vielleicht einer von Euch, woran es liegt?
oder gibt es am Ende eine komplett einfachere Lösung? (ich habe keine Informatikerausbildung und Algorithmenentwicklung nicht nativ gelernt)
Vielen Dank.