AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Strings mit Parameter in einer Konsolanwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Strings mit Parameter in einer Konsolanwendung

Ein Thema von Back2Code · begonnen am 8. Feb 2012 · letzter Beitrag vom 8. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#1

Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 07:30
Ich lerne seit ein paar Wochen Delphi und bin gerade dabei eine kleine Konsolen Anwendung zu schreiben. Zur Zeit sieht mein Code so aus :

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

var VName,NName:String;
     PPasswort:String;


begin
WriteLn('################################Login###########################################');
WriteLn; //Eine Zeile auslassen
PPasswort:='';
begin
WriteLn('root@localhost ~ Insert password');
ReadLn(PPasswort);
CompareStr(PPasswort, '1337');
if(CompareStr(PPasswort, '1337') = 0) then
WriteLn('*Access granted*')
else begin
WriteLn('*Access denied*');
Sleep(2000);
exit;
end;
end;
WriteLn; //Eine Zeile auslassen
WriteLn('Wie lautet dein Vorname?');
ReadLn(VName);
WriteLn('Wie lautet dein Nachname?');
ReadLn(NName);
WriteLn;
WriteLn('Willkommen '+VName+' '+NName+'.');
ReadLn;
end.
Ich habe jetzt vor nach dem "Willkommen" eine String Wiederholungfunktion einzubauen mit Parameter.

Als Beispiel :

repeatstr Teststring 99 = Würde jetzt "Teststring" 99 mal hintereinander in der Console schreiben...

Meine Frage ist jetzt wie ich das am besten umsetzen könnte.

  Mit Zitat antworten Zitat
Benutzerbild von Coffeecoder
Coffeecoder

Registriert seit: 27. Apr 2011
242 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 07:35

Ich habe jetzt vor nach dem "Willkommen" eine String Wiederholungfunktion einzubauen mit Parameter.
Hi, du sagst ja schon selbst: Die schreibt eine Funktion resp eine Prozedur dafür:
Delphi-Quellcode:
procedure wiederholen(wiederholungen : integer; text : String);
var i : integer;
begin
  for i := 1 to wiederholungen do
  begin
    writeln(text);
  end;
end;
P.S. : Willkommen in der
Coffeecoder

Geändert von Coffeecoder ( 8. Feb 2012 um 07:36 Uhr) Grund: Add
  Mit Zitat antworten Zitat
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#3

AW: Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 08:04
So atm sieht mein Code jetzt so aus :

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

var text:String;
    wiederholungen:integer;
    var i : integer;

begin
WriteLn('Usage: repeatstr [string] [repeats]');
ReadLn(text);
ReadLn(wiederholungen);
begin
  for i := 0 to wiederholungen do
  begin
    writeln(text);
  end;
  end;
end.
Wie kann ich text & wiederholungen in einer Zeile auslesen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

AW: Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 08:33
Wie kann ich text & wiederholungen in einer Zeile auslesen?
Du hast dir doch bestimmt schonmal die OH und einige Tutorials angesehn?

Dann ist dir bestimmt aufgefallen, daß WriteLn mehrere Parameter kann.
Delphi-Quellcode:
WriteLn(IntToStr(Wiederholungen) + Text);

WriteLn(Wiederholungen, Text);

Write(IntToStr(Wiederholunge));
Write(Text);
WriteLn;

Write(Wiederholunge);
Write(Text);
WriteLn;

Write(IntToStr(Wiederholunge));
WriteLn(Text);

Write(Wiederholunge);
WriteLn(Text);

uvm.
Was ich dir aber noch dringen anraten würde:
Codformatierung nutzen ... schon ist der code übersichtlicher/verständlicher. (der Code aus Post #1 ist irgendwie grausam)

Delphi-Quellcode:
CompareStr(PPasswort, '1337');
if(CompareStr(PPasswort, '1337') = 0) then
Was macht das nutzlose CompareStr dort? Also das vovon der Rückgabewert nicht ausgewertet wird.

Delphi-Quellcode:
if CompareStr(PPasswort, '1337') = 0 then

if not SameStr(PPasswort, '1337') then

if PPasswort <> '1337then
Mal so aus privatem Interesse: Was haben eigentlich die Prefixe V, N und P, bei den Variablen, für eine Bedeutung?

[edit]
OK, V und N hab ich grade bemerkt, aber warum heißen die Variablen dann nicht gleich Vorname und Nachname?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Feb 2012 um 08:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 08:40
Also der Code ist ja grauslich formatiert

Warum die Funktion nicht so benennen wie der TE das schon vorgeschlagen hat?
Und einen String Parameter nach Möglichkeit immer als const definieren.

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

var
  VName, NName : String;
  Passwort : String; // PPasswort würde eigentlich auf einen Pointer schließen lassen

function RepeatStr( const Str : string; Count : integer ) : string;
var
  idx : integer;
begin
  Result := '';
  for idx := 1 to Count do
    Result := Result + Str;
end;

begin
  WriteLn( '################################Login###########################################' );
  WriteLn; //Eine Zeile auslassen
  Passwort := '';

  begin // <= ist überflüssig

    WriteLn( 'root@localhost ~ Insert password' );
    ReadLn( Passwort );

    CompareStr( Passwort, '1337' ); // <= ist überflüssig

    if
      ( CompareStr( Passwort, '1337' ) = 0 )
    then
      WriteLn( '*Access granted*' )
    else
      begin
        WriteLn( '*Access denied*' );
        Sleep( 2000 );
        exit;
      end;

  end; // <= ist so überflüssig, wie das begin weiter oben

  WriteLn; //Eine Zeile auslassen
  WriteLn( 'Wie lautet dein Vorname?' );
  ReadLn( VName );
  WriteLn( 'Wie lautet dein Nachname?' );
  ReadLn( NName );
  WriteLn;
  WriteLn( 'Willkommen ' + VName + ' ' + NName + '.' );

  // Aufruf der Funktion mit gleichzeitiger Ausgabe
  WriteLn( RepeatStr( 'Teststring', 99 ) );

  ReadLn;
end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#6

AW: Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 09:57
Funktioniert jetzt einigermaßen wie ichs wollte..ich wundere mich etwas, da die Binary jetzt über 1 MB groß ist Gibts da ein paar Tricks wie ich die kleiner bekomme?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 10:08
Wenn du dein Profil dahingehend anpassen würdest, mit welcher Delphi-Version du arbeitest, dann wäre das sehr hilfreich

Vermutlich erzeugst du eine Debug-Version ... mit eben all den Debug-Informationen, und dass lässt natürlich die erzeugte exe anwachsen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#8

AW: Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 10:21
Danke für den Tipp. Jetzt sind's nur noch 130 kb.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 10:51
Einen großen Teil macht dabei SysUtils aus (ca. 100KB).

Dieses kann man vermeiden, wenn man gezielt auf Teile von SysUtils verzichtet oder nur die benötigten Teile in eine eigene Unit auslagert.

Delphi-Quellcode:
program ConsoleTest;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  // System.SysUtils;

  // statt der sehr großen SysUtils nehmen wir unsere eigene

  uSmallSysUtils in 'uSmallSysUtils.pas';

var
  VName, NName : String;
  Passwort : String; // PPasswort würde eigentlich auf einen Pointer schließen lassen

function RepeatStr( const Str : string; Count : integer ) : string;
var
  idx : integer;
begin
  Result := '';
  for idx := 1 to Count do
    Result := Result + Str;
end;

begin
  WriteLn( '################################Login###########################################' );
  WriteLn; // Eine Zeile auslassen
  Passwort := '';

  WriteLn( 'root@localhost ~ Insert password' );
  ReadLn( Passwort );

  // statt SysUtils.CompareStr vergleichen wir so

  if ( Passwort <> '1337' )
  then
    WriteLn( '*Access granted*' )
  else
    begin
      WriteLn( '*Access denied*' );
      Sleep( 2000 );
      exit;
    end;

  WriteLn; // Eine Zeile auslassen
  WriteLn( 'Wie lautet dein Vorname?' );
  ReadLn( VName );
  WriteLn( 'Wie lautet dein Nachname?' );
  ReadLn( NName );
  WriteLn;
  WriteLn( 'Willkommen ' + VName + ' ' + NName + '.' );

  // Aufruf der Funktion mit gleichzeitiger Ausgabe
  WriteLn( RepeatStr( 'Teststring', 99 ) );

  ReadLn;

end.
und die uSmallSysUtils.pas sieht dann so aus (ist halt nur die Sleep-Funktion)
Delphi-Quellcode:
unit uSmallSysUtils;

interface

procedure Sleep(milliseconds: Cardinal);{$IFDEF MSWINDOWS} stdcall; {$ENDIF}
{$IFDEF MSWINDOWS}
(*$EXTERNALSYM Sleep*)
{$ENDIF}

implementation

{$IFDEF MSWINDOWS}
procedure Sleep; external 'kernel32.dllname 'Sleep'; stdcall;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}

procedure Sleep( milliseconds : Cardinal );
begin
  usleep( milliseconds * 1000 ); // usleep is in microseconds
end;
{$ENDIF POSIX}

end.
Jetzt ist die Release-Version nur noch 32KB groß ... aber ...

grundsätzlich sollte man gerade als Anfänger davon erstmal absehen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#10

AW: Strings mit Parameter in einer Konsolanwendung

  Alt 8. Feb 2012, 11:17
Wobei die paar 118 98 KB heutzutage ja kaum noch auffallen.
(da kann man schonmal zwischen Aufwand und Nutzen abwägen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Feb 2012 um 11:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz