Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Buchstabe aus einer Zeile auslesen (https://www.delphipraxis.net/14138-buchstabe-aus-einer-zeile-auslesen.html)

Spike2k3 2. Jan 2004 22:18


Buchstabe aus einer Zeile auslesen
 
Hi,
Was muss ich eingeben, dass Delphi aus einer Reihe Zahlen oder Buchstaben nur den was weiss ich 23. nimmt und dann aus der nächten Ziele den dritten usw. und die dann im Edit1 anzeigt???
Also 0035625462645264524654654654546542642 <---die erste 3
0312435053048237285043825435848504854 <---die erste 2
Wäre euch echt dankbar... :)

Mirilin 2. Jan 2004 22:34

Re: Buchstabe aus einer Zeile auslesen
 
:hi:

Du kannst die Zeichen eines Strings wie die Werte in einem Array ansprechen : String[Stelle].
(Wobei das 1. Zeichen den Index 1 und das Letzte den Index Length(DesStrings) hat)

mfg Tobias

Spike2k3 2. Jan 2004 22:40

Re: Buchstabe aus einer Zeile auslesen
 
mal ausprobieren...
Ich hoffe ich hab verstanden was du meinst...
Na ma gucken

franz 2. Jan 2004 22:42

Re: Buchstabe aus einer Zeile auslesen
 
Hi Spike2k3,

ehrlich gesagt ist deine Frage etwas missverständlich.

Also bei Strings kannst du folgendes verwenden:

Beispiel: S := 'abcdefg' // S wird der String zugewiesen
Dabei musst du beachten, dass der erste Buchstaben den Index 1 hat!

S[1] liefert den Buchstaben a,
S[2] b,
S[3] c
u. s. w.

Wenn du mehrere Zeichen hintereinander ermitteln möchtest, kannst du die Copy Funktion verwenden. Die Copy Funktion kann außerdem auf Arrays angewendet werden.

Beispiel:
Delphi-Quellcode:
S := 'abcdefg'
S := Copy(S, 2, 5);
Daduch werden S die Buchstaben "b" bis "e" zugewiesen. Das Ergebnis ist also "bcde".

Wenn du die erste Position eines Zeichens in einem String ermitteln möchtest, kannst du das mit AnsiPos tun.

Mit LastDelimiter kannst du ein bestimmtes Zeichen am Ende eines Strings ermitteln.

Wie Copy, AnsiPos und LastDelimiter funktinieren steht ausführlich in der Delphi Hilfe.


Ich hoffe, dass ich dir helfen konnte.

Spike2k3 2. Jan 2004 22:49

Re: Buchstabe aus einer Zeile auslesen
 
ICh möchte gerne
den 5 und 10 buchstaben aus einer Reihe auslesen und aus der nächsten Reieh wieder andere...
und die dann in nem Memo anzeigen, nacheinander

verständlicher?

franz 2. Jan 2004 22:55

Re: Buchstabe aus einer Zeile auslesen
 
Es kommt auf das Steuerelement oder Objekt an.

Bei TMemo, TColorMemo, TRichEdit, TStringList, TStrings, u.s.w kann auf die einzelnen Zeilen mit der gleichen Methode zugegriffen werden. Dabei beginnt der Index allerdings mit 0 (NULL).

Memo1.Lines[0] gibt die erste Zeile in Memo1 zurück.
Memo1.Lines[0][5] gibt den 5. Buchstaben in der ersten Zeile von Memo1 zurück.

Spike2k3 2. Jan 2004 23:00

Re: Buchstabe aus einer Zeile auslesen
 
hey..in gewisser Weise klappts ;)
hier is ma Quelltext soweit:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Button3: TButton;
    Memo2: TMemo;
    Edit1: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  DateiName,s : string;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
DateiName:=Edit1.Text; //Die Datei mit dem Code wird eingegeben
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.lines.loadfromfile(DateiName); //Der Inhalt der txt wird eingelesen
S:=Memo1.Lines.text; //und wird mit S gleichgesetzt
S := Copy(S, 2, 5); //die Zahlen 2-5 werden ausgewählt
Memo1.text:= S;     // und im Memo 1 angezeigt

end;



end.
Soweit sogut, doch möchte ich das aus der ersten Zeile nur die 4. Zahl und dann aus der zweiten Zeile die 3. Zahl ausgewählt wird..und die dann hintereinander, zb. als AB oder 43 oder so angezeigt werden (im Memo)...

franz 2. Jan 2004 23:06

Re: Buchstabe aus einer Zeile auslesen
 
Ganz einfach:

Delphi-Quellcode:
Memo1.Lines.Add(Memo1.Lines[0][4] + Memo1.Lines[1][3]);

Spike2k3 2. Jan 2004 23:10

Re: Buchstabe aus einer Zeile auslesen
 
Und wenn ich gerne die Zeilen der DAtei einlesen möchte, also direkt...?
Means: Datei einlesen und nur Zeile 1, Buchstabe 4 etc. im Memo eins ausgeben...?

franz 2. Jan 2004 23:22

Re: Buchstabe aus einer Zeile auslesen
 
Vorsicht! Das wird sehr sehr schwierig!

Versuche lieber die Datei in eine Stringliste zu laden:

Delphi-Quellcode:
var mList: TStringList;
begin
  mList := TStringList.Create;
  try
    mList.LoadFromFile('Dateiname');

    // Anschließend kannst du in mList auf die Zeilen zugreifen.
    // Beispiel:
    mList[0]; // Liefert die erste Zeile zurück
    mList[0][4]; // Liefert den 4. Buchstaben in der ersten Zeile zurück
  finally
    mList.Free;
  end;
end;
Du kannst aber auch direkt auf die Datei zugreifen. Dazu muss du allerdings die Windows API Funktionen verwerden, um die einzelnen Zeilen in einer Schleife abzuarbeiten (kann sehr sehr kompliziert werden!).

Also es ist schon spät ich mach dann mal Schluss.

Luckie 2. Jan 2004 23:28

Re: Buchstabe aus einer Zeile auslesen
 
Zitat:

Zitat von franz
Vorsicht! Das wird sehr sehr schwierig!

Wie so das?
AssignFile, Reset, ReadLn heißen die Zauberwörter aus der Hilfe. ;)

franz 3. Jan 2004 21:36

Re: Buchstabe aus einer Zeile auslesen
 
@Luckie

Das ist leider nur die halbe Wahrheit. AssignFile weißt nur einer Dateivariablen eine Datei zu. Die Datei muss auch noch geöffnet (Reset) und natürlich auch wieder geschlossen (CloseFile) werden. Außerdem muss neben der Dateivariablen noch eine weitere deklariert werden, die den Wert von ReadLn aufnehmen kann. ReadLn ist keine Funktion! Wenn die Datei abgearbeitet werden soll ist zusätzlich noch ein EOF (End of file) nötig.

Delphi-Quellcode:
var S: String;
    mFile: TextFile;
begin
  AssignFile(mFile,'Dateiname'); // Datei zuweisen
  Reset(mFile); // Datei öffnen
  try
    Readln(mFile,S); // Erste Zeile der Datei lesen
    while not Eof(mFile) do // Datei abarbeiten
      begin
        Application.ProcessMessages; // Windows Botschaftenwarteschleife abarbeiten

        // Quelltext für die Verarbeitung des übergebenen Strings hier einfügen. Der String wurde an S übergeben.

        Readln(mFile,S); // Nächste Zeile lesen
      end;
   
    // Quelltext für die Verarbeitung des letzten übergebenen Strings hier einfügen. Der Einsatz einer Prozedur kann hilfreich sein.

  finally
    CloseFile(mFile); // Datei schließen. Wenn die Datei nicht geschlossen wird, ist sie erst wieder nach einem Windowsneustart verfügbar!
  end;
end;
Das ist noch ein einfaches Beispiel. Wenn die Datei mehrere abzuarbeitende sogenannte Sections hat, habe ich schon einmal mehr als 400 Zeilen Programmcode gebraucht. Der Einsatz von TIniFile kam bei dieser Datei nicht in Frage, da die Datei sowohl Sections mit eckigen, als auch mit runden Klammern hatte.

Zumindest funktioniert das so bei Delphi 5. Eine Stringliste hat allerdings den Nachteil, dass sie nicht viel mehr als 32.000 Zeilen enthalten darf, da sonst der Fehler auftritt, dass eine Zeile nicht eingefügt werden kann. An was das liegt weiß ich auch nicht. Entweder an der Arbeitsspeichergröße oder aus einem anderen Grund.

:arrow: P. S. Da dies nicht mehr zum Thema passt, kannst du dieses dementsprechend verschieben und einen Link von dieser Seite aus einfügen?


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