Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit Writeline (https://www.delphipraxis.net/106460-probleme-mit-writeline.html)

STS301 11. Jan 2008 08:23


Probleme mit Writeline
 
Hallo

so einfach und Delphi 2005 zeigt mir eine Fehlermeldung an, wenn ich eingebe:

Delphi-Quellcode:
Writeln('Bitte geben Sie die Anzahl der Gäste ein:');
Fehlermeldung:

Im Projekt Projekt2.exe ist eine Exception in der Klasse EInOutError mit der Meldung 'E/A Fehler 105' aufgetreten.

DeddyH 11. Jan 2008 08:33

Re: Probleme mit Writeline
 
Das ist aber eine Konsolenanwendung?

marabu 11. Jan 2008 08:53

Re: Probleme mit Writeline
 
Hallo Sebastian,

Fehler 105 besagt, dass du die Datei (hier OUTPUT) nicht geöffnet hast.

Delphi-Quellcode:
{$APPTYPE CONSOLE}

var
  con: TextFile;
  n: Integer;

begin
  Assign(con, 'con');
  Rewrite(con);
  Writeln(con, 'Bitte geben Sie die Anzahl der Gäste ein:');
  ReadLn(con, n);
  CloseFile(con);
end;
Freundliche Grüße

STS301 11. Jan 2008 09:03

Re: Probleme mit Writeline
 
das sieht bei mir jetzt so aus

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  con: TextFile;
  n: Integer;

begin
  Assign(con, 'con');
  Rewrite(con);
  Writeln(con, 'Bitte geben Sie die Anzahl der Gäste ein:');
  ReadLn(con, n);
  CloseFile(con);

end.
jetzt tritt Fehler 104 auf :gruebel:

Klaus01 11. Jan 2008 09:08

Re: Probleme mit Writeline
 
Zitat:

Delphi-Quellcode:
begin
  Assign(con, 'con');
  Rewrite(con);
  Writeln(con, 'Bitte geben Sie die Anzahl der Gäste ein:');
  ReadLn(con, n);
  CloseFile(con);

end.

Rewrite öffnet die Datei zum Schreiben.
Reset würde die Datei zum lesen öffnen.

Delphi-Quellcode:
  Assign(con, 'con');
  Rewrite(con);
  Writeln(con, 'Bitte geben Sie die Anzahl der Gäste ein:');
  CloseFile(con);
  Reset(con);
  ReadLn(con, n);
  CloseFile(con);
Und wenn Du aus dem Textfile liest, kannst Du nur Strings auslesen.
Wenn Du Integer haben willst, musst Du den String konvertieren (strtoInt).

Vielleicht schreibst Du nochwas Du überhaupt machen willst.
Ich habe fast den Eindruck Du willst etwas auf dem Bildschirm ausgeben
und von dort etwas einlesen?

Grüße
Klaus

Dax 11. Jan 2008 09:11

Re: Probleme mit Writeline
 
Und Reset setzt nebenbei den Dateizeiger auf 0. Tipp: CON ist ein Pseudofile und Standardmäßig Read/Write-geöffnet.

DeddyH 11. Jan 2008 09:13

Re: Probleme mit Writeline
 
Also, bei mir funktioniert es. Meine Hilfe meint zu writeln:
Zitat:

Zitat von Online-Hilfe
Wird eine Anwendung als Konsolenanwendung compiliert (mit der Option Textbildschirm-Anwendung erzeugen in der Registerkarte Linker des Dialogfelds Projekt/Optionen oder dem Parameter -cc des Kommandozeilen-Compilers), werden die Dateien Input und Output automatisch dem Konsolenfenster der Anwendung zugeordnet. Bei anderen Anwendungen sführt jeder Versuch, aus Input zu lesen oder in Output zu schreiben, zu einem E/A-Fehler.

Eine kleine funktionierende Testanwendung:
Delphi-Quellcode:
program Blubb;

uses
  SysUtils;

{$APPTYPE CONSOLE}

var s: string;

begin
  writeln('Irgendwas eingeben:');
  readln(s);
  writeln('Sie haben eingegeben: ' + s);
  readln;
end.

Luckie 11. Jan 2008 09:14

Re: Probleme mit Writeline
 
Dem Text nach zu Urteilen willst du den Text in einer Konsole ausgeben. Warum um Himmels Willen machst du den Umweg über CON?

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  n: Integer;

begin
  Writeln('Bitte geben Sie die Anzahl der Gäste ein:');
end.
Der Fehler liegt bestimmt nicht in der Writeln-Anweisung, da bleibt der Debugger wohl nur stehen.

sirius 11. Jan 2008 09:16

Re: Probleme mit Writeline
 
Enteder komplett Konsolenanwendung, oder MSDN-Library durchsuchenAllocconsole

Aber vielleicht soll es auch gar keine Konsole werden :mrgreen:

DeddyH 11. Jan 2008 09:17

Re: Probleme mit Writeline
 
Zitat:

Zitat von Luckie
Warum um Himmels Willen machst du den Umweg über CON?

Genau darauf wollte ich hinaus ;)

marabu 11. Jan 2008 10:18

Re: Probleme mit Writeline
 
Zitat:

Zitat von STS301
... jetzt tritt Fehler 104 auf

Mein Fehler - ich habe den Code für die Konsolenausgabe aus einem meiner Filterprozesse zusammenkopiert und das ReadLn() einfach ohne großes Nachdenken dazugeschrieben. Da du Lesen und Schreiben möchtest brauchst du zwei Kanäle:

Delphi-Quellcode:
program Demo;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  conIn, conOut: TextFile;
  n: Integer;

begin
  AssignFile(conIn, 'con:');
  Reset(conIn);
  AssignFile(conOut, 'con:');
  Rewrite(conOut);
  Write(conOut, 'Number: ');
  ReadLn(conIn, n); // ... look ma - no hands
  Write(conOut, 'Press ENTER to proceed...');
  ReadLn(conIn);
  CloseFile(conOut);
  CloseFile(conIn);
end.
Die Verwendung der vordefinierten Dateivariablen input und output vermeide ich bei interaktiven Konsolanwendungen, da ich sie in der Regel für eine unabhängige I/O-Redirection benötige.

Freundliche Grüße

Luckie 11. Jan 2008 10:19

Re: Probleme mit Writeline
 
Noch mal: Warum dieser Umweg?

marabu 11. Jan 2008 11:38

Re: Probleme mit Writeline
 
Hallo Michael,

Umweg scheint mir nicht das passende Wort zu sein. In meinen Konsolenanwendungen sind die beiden File-Variablen INPUT und OUPUT für Piping und Redirection reserviert, Fortschrittsanzeige, Meldungen und Benutzerabfragen sollen aber unbedingt auf der Konsole ausgegeben werden. Die Deklaration und Verwendung von conIn und conOut ist für mich eher eine Frage der Quelltext-Hygiene, aber das sind persönliche Wahrnehmungen.

Hätte ich in meinem Beispiel input und output verwendet, dann hätte ich erklären müssen, warum das unter gewissen Umständen nicht das erwartete Ergebnis bringt. Das wollte ich vermeiden.

Jetzt musste ich doch noch erklären - und sogar zweimal.

Freundliche Grüße

STS301 11. Jan 2008 13:58

Re: Probleme mit Writeline
 
aha so funktioniert es also, ich habe gedacht, die Writeln öffnet sich wie im VB eine Inptubox

@Luckie:

mit deiner Methode zeigt er mir die Konsole auch nur den Bruchteil einer Sekunde an und verschwindet dann wieder.

mit der Methode von DeddyH funktioniert es


Frage: kann man zu Beispiel eine Javakonsole damit öffnen (wills nur wissen ob es geht, wenn ja wie)
Bitte keine Fragen 'Wofür?' :-D

himitsu 11. Jan 2008 14:13

Re: Probleme mit Writeline
 
Zitat:

Zitat von STS301
@Luckie:

mit deiner Methode zeigt er mir die Konsole auch nur den Bruchteil einer Sekunde an und verschwindet dann wieder.

klar, weil das Programm sofort danach fertig ist mit der Arbeit und sich beendet.

wenn du das Programm von einer bestehenden Konsole (z.B. direkt CMD.exe) aus aufrufst, dann bleibt der Text länger da

oder du läßt das Programm selber warten.
Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses SysUtils;

begin
  Writeln('Bitte geben Sie die Anzahl der Gäste ein:');
  ReadLn(); // auf [Enter] drücken zum Beenden, oder Konsolenffenster schließen [X]
end.


Zitat:

Zitat von STS301
Frage: kann man zu Beispiel eine Javakonsole damit öffnen (wills nur wissen ob es geht, wenn ja wie)
Bitte keine Fragen 'Wofür?' :-D

wofür?

und was ist 'ne Javakonsole?

STS301 11. Jan 2008 14:26

Re: Probleme mit Writeline
 
Java hat in der Entwicklungsumgebung keine Userform (oder Form wie in Delphi), sondern, man benötigt eine vorprogrammierte Konsole, die dann aussieht wie eine Lehre Delphikonsole (wenn man sie startet, mit dem Code, dass die Konsole nur geöffnet werden soll)

wirklichen Gedanken warum habe ich mir auch noch nicht gemacht, aber wenn, wie würde es funktionieren


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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