Autor Beitrag
lany
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 25.06.07 14:34 
Hi,
ich bin ein ziemlicher Anfänger und brauche daher noch Rat von den "Großen" ^^

Hier im Dateianhang seht ihr meine zu lösende Aufgabe. Das problem ist, dass das Porgramm ständig die Fehlermitteilung "e/a-Fehler 104" ausgibt und anschließend nur dir erste Zeile meines textfiles bearbeitet. D.h. das er mir im ersten editfeld eine "1" anstatt "13" ausgibt, und demzufolge auch den text aus zeile "1", da für das programm ja auch die "1" die letzte Zeile darstellt.

Ich wäre für eure Hilfe sehr dankbar... so faar der lany.
Einloggen, um Attachments anzusehen!
FiceGoesDelphi
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: Mo 25.06.07 14:46 
Ist der Text in dem Editor auf dem Screen von dir?!
Schreib doch bitte nochmal das, was du bis jetzt hast hier ins Forum (aber bitte in Delphi Tags --> [Delphi] Code [/Delphi] <--)
Dann schauen wir mal, wie wir dir helfen können! :)
LG,

_________________
<(^^<) <(^^)> (>^^)>
===================
lany Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 25.06.07 15:15 
klar kein Problem

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm6.Button1Click(Sender: TObject);

var
i:integer;
feld : array [1..100] of string;
datei: textfile;
zeile: string;

begin

assignfile(datei,'c:\hoertext_ueberarbeitet.txt');
reset(datei);
i:=0;
while not EOF (datei) do
begin
readln(datei,zeile);
i:=i+1;
Feld[i]:=copy(zeile,i,43);
closefile(datei);
edit1.text := inttostr(i);
edit2.text := Feld[i];

end;
end;


Die aufgabenstellung betrifft den Text sowie die beiden oberen Abbildungen auf dem screenshot im anhang. Vielen dank für den schnellen reply!
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Mo 25.06.07 15:21 
Das closefile ist das Problem, zieh das mal aus der Schleife raus, dann müsste es gehen.

_________________
Bravery calls my name in the sound of the wind in the night...
lany Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 25.06.07 16:04 
ja ich glaube du liegst auf dem richtigen Weg! Die Ausgabe der Zeilenanzahl (edit1.text) stimmt jetzt, blos leider wird die letzte zeile in edit2.text nicht ausgegeben.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 25.06.07 16:20 
Sicher, dass die letzte Zeile in der Datei nicht etwa eine leere ist?
Ausserdem wär's statt mit dem Array of String mit einer TStringList gleich mehrfach einfacher:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
lany Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 25.06.07 21:34 
ne guck mal, er soll lesen wieviel zeilen es gibt. Das ist davon abhängig ob ein buchstabe in der Zeile steht. Die Anzahl wird ja auch im edit1.text ausgegeben. Anschließend soll die letzte Zeile ausgeben werden die ein Zeichen enthält. Sprich Zeile 13 in unserm Beispiel.
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Mo 25.06.07 22:32 
ausblenden Delphi-Quelltext
1:
Feld[i] := copy(zeile,i,43);					

Schau' dir doch mal den Befehl copy nochmal genauer an, dann kommst du bestimmt auf den Fehler.
lany Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 25.06.07 22:49 
wüsste jetzt nicht was an "i" falsch sein sollte, da "i" doch für die letzte zeile stehen soll, von dem 43 zeichen gelesen werden sollen. Und "zeile" steht ja halt für den string, der abgearbeitet werden soll.
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Mo 25.06.07 22:56 
Genau aus dem Grund sag' ich ja, schau' dir copy nochmal etwas genauer an, dann wirst du schon auf den Fehler kommen!
lany Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 25.06.07 23:29 
ich hab mich gerade nochmal versucht mit all mein gesunden menschenverstand da hineinzuversetzen, aber ich begreife es nicht. Ich kann ja nochmal ne Nacht drüber schlafen und dann erneut versuchen den Durchblick zu erlangen, aber selbst meine Quellen deutschsprachiger Natur, die mir zum Thema "copy" zu verfügung stehen, bringen kein licht ins dunkel. Ich finde für diese tollen Formulierungen hab ich mir die Auflösung des Problems verdient :D *g*
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 25.06.07 23:43 
Moin!

user profile iconlany hat folgendes geschrieben:
Ich finde für diese tollen Formulierungen hab ich mir die Auflösung des Problems verdient :D *g*

Nein, ganz sicher nicht 8) aber den DOH-Auszug zu Copy(): :lol:
DOH hat folgendes geschrieben:
Die Funktion gibt einen Teilstring eines Strings oder ein Segment eines dynamischen Arrays zurück.

Unit

System

Kategorie

String-Verarbeitung

Delphi-Syntax:

ausblenden Delphi-Quelltext
1:
2:
function Copy(S; Index, Count: Integer): string;
function Copy(S; Index, Count: Integer): array;


Beschreibung

S ist ein Ausdruck des Typs String oder dynamisches Array. Index und Count sind Integer-Ausdrücke. Copy gibt einen Teilstring oder ein Teilarray zurück, das Count Zeichen oder Elemente ab S[Index] enthält. Der Teilsstring oder das Teilarray ist eine eindeutige Kopie (d.h., Speicher wird nicht gemeinsam mit S genutzt, obwohl Zeiger- oder Objekt-Elemente des Arrays nicht kopiert werden).

Ist Index größer als die Länge von S, gibt Copy einen leeren String oder ein leeres Array zurück.

Gibt Count mehr Zeichen oder Array-Elemente an, als verfügbar sind, werden nur die Zeichen oder Elemente von S[Index] bis zum Ende von S zurückgegeben.

Hinweis: Wenn S ein dynamisches Array ist, brauchen Sie die Parameter Index und Count nicht anzugeben. Copy kopiert dann das gesamte Array.

:mahn: :les: ;)
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
lany Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Di 26.06.07 07:24 
jetzt hats endlich klick gemacht. Er hat quasi ab dem 13ten Zeichen versucht weitere 43 Zeichen zu kopieren. Und wenn die Zeile nun mal nicht mehr als 13 Zeichen hat, wird auch nichts ausgegeben. Daraus folgt :

ausblenden Delphi-Quelltext
1:
Feld[i]=copy(zeile,1,43];					


jetzt würde mich nur noch interessieren, wie ich einstellen kann, dass ich z.b zeile 10 ausgeben will und nicht die letzte.
und die 2te frage lautet : wieso muss auf closefile verzichtet werden - ich habe mal etwas angeblich allgemein gültiges gelernt, dass nach jedem reset einer datei, diese auch wieder geschlossen werden soll.
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Di 26.06.07 07:33 
user profile iconlany hat folgendes geschrieben:
jetzt hats endlich klick gemacht. Er hat quasi ab dem 13ten Zeichen versucht weitere 43 Zeichen zu kopieren. Und wenn die Zeile nun mal nicht mehr als 13 Zeichen hat, wird auch nichts ausgegeben. Daraus folgt :

ausblenden Delphi-Quelltext
1:
Feld[i]=copy(zeile,1,43];					


jetzt würde mich nur noch interessieren, wie ich einstellen kann, dass ich z.b zeile 10 ausgeben will und nicht die letzte.
und die 2te frage lautet : wieso muss auf closefile verzichtet werden - ich habe mal etwas angeblich allgemein gültiges gelernt, dass nach jedem reset einer datei, diese auch wieder geschlossen werden soll.


ausblenden Delphi-Quelltext
1:
2:
if i = 9 then
 edit2.text:= zeile;


9 deshalb, weil du bei 0 anfängst zu zählen :)

LG
Stefan

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Di 26.06.07 07:46 
user profile iconlany hat folgendes geschrieben:
und die 2te frage lautet : wieso muss auf closefile verzichtet werden - ich habe mal etwas angeblich allgemein gültiges gelernt, dass nach jedem reset einer datei, diese auch wieder geschlossen werden soll.

Verzichten sollst du nicht, denn wenn du das machst lässt sich die Datei nicht mehr öffnen bis dein Programm geschlossen wird und Windows das für dich übernimmt.

Dein Fehler war nur, dass du das closefile in die Schleife genommen hast und nicht hinter die Schleife. Dadurch das sie drinne war konnte er den ersten Schleifendurchlauf erfolgreich durchführen, aber ab dem 2. Durchlauf schug das readln fehl, da er keine Zugriffe mehr auf die Datei hatte.

Grüße
Heiko
lany Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Di 26.06.07 08:16 
alles klar leute - vielen dank für die tips!! =)