eine Variable in 2 Var. speichern <- gelöst

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Stephanie H.
Beiträge: 91
Registriert: Sa 6. Feb 2010, 15:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

eine Variable in 2 Var. speichern <- gelöst

Beitrag von Stephanie H. »

Hi
Also ich hab da so ein Problem...
Denn ich möchte bei Lazarus eine Variable in 2 Variablen speichern...
also ich hab da so ne Textdateiund die soll mein Programm lesen
und in jeder Zeile sind 2 Werte und die möchte ich in 2 Variablen speichern...
Ach ja zwischen den Werten ist immer ein Leerzeichen und ein Wert ist 5-7 Zeichen lang...
Auf jeden Fall schon mal Danke im Vorras !D

Kann man das überhaupt machen?
Zuletzt geändert von Stephanie H. am Fr 7. Mai 2010, 23:10, insgesamt 3-mal geändert.

Linkat
Lazarusforum e. V.
Beiträge: 560
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: HILFE !!! :D

Beitrag von Linkat »

Hallo Stephanie H,
dein Problem kann man mit Stringlisten lösen. Zunächst musst du deine Stringliste "createn". Dann kannst du die Datei in die Stringliste einlesen und zeilenweise zerlegen. Am Ende musst du deine Stringliste wieder freigeben.

Beispiel-Code als Trockenübung:

Code: Alles auswählen

procedure Form1.btStartClick;
const trennzeichen = ' ';
var 
  s,s1,s2           :string;
  i,l                  :integer;
  sl                   :TStringList;
begin
  sl:=TStringList.Create;                     //StringListe wird kreiert
  sl.LoadFromFile('DeineTextDatei');    //File wird in Stringliste eingelesen
  for i:=0 to sl.Count-1 do begin
    s:=sl.Strings[i];                         //der Text wird zeilenweise in s eingelesen
    j:=Pos(trennzeichen,s);             //Position des Trennzeichens wird gesucht    
    if j>0 then begin                       // wenn Trennzeichen vorhanden, dann
      s1:=Copy(s,1,j-1);                  //die 1. Variable wird von Position 1 bis eine Position vor dem Trennzeichen in s1 eingelesen
      s2:=Copy(s,j+1);              //  die 2. Variable wird von Position nach dem Trennzeichen bis zum Ende von s nach s2 eingelesen
      ListBox1.Items.Add(s1);         
      ListBox2.Items.Add(s2);
    end;  {if}
  end;   {for}
  sl.Free;                            //die Stringliste wird wieder freigegeben
end;
Zum Thema Stringlisten gibt es z. B. im Forum Delphi-Treff weitere Hinweise:
http://www.delphi-treff.de/no_cache/tut ... sword_list" onclick="window.open(this.href);return false;[0]=stringliste

Viel Spaß beim Durcharbeiten.

Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: HILFE !!! :D

Beitrag von Socke »

Linkat hat geschrieben:Hallo Stephanie H,
dein Problem kann man mit Stringlisten lösen. Zunächst musst du deine Stringliste "createn". Dann kannst du die Datei in die Stringliste einlesen und zeilenweise zerlegen. Am Ende musst du deine Stringliste wieder freigeben.
Solange nur zwei Werte in jeder Zeile stehen, kann man das auch mit einer einzigen StringList bearbeiten (siehe Code). Wenn es darum geht Die Dateioperationen (öffnen, lesen, schreiben) kennen zu lernen, sind diese Listen aber denkbar ungeeignet (siehe Links weiter unten).

Code: Alles auswählen

var
  s: TStringList;
begin
  s := TStringList.Create;
  s.LoadFromFile('/mein/datei/liegt/hier.txt');  // Datei laden
  s.NameValueSeperator := ' '; // Trenner zwischen wert1 und wert2 ist ein Leerzeichen
  // an die Daten kommt man jetzt mit
  s.Names[] // Wert links vom Leerzeichen
  // und
  s.Values[]  // Wert rechts vom Leerzeichen
  s.Free;
end;
FreePascal bietet mehrere Möglichkeiten um auf den Inhalt von Dateien zuzugreifen:
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6771
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: HILFE !!! :D

Beitrag von af0815 »

Stephanie H. hat geschrieben:Also ich hab da so ein Problem...
:shock: Das erste Problem ist eine nichtssagende Überschrift (Betreff). Schon die Überschrift sollte was aussagen. :idea:

Die kann man über Edit des ersten Beitrages erreichen. Wenn das Problem gelöst ist/wird, so ist hinterher üblich die Lösung zu Posten und ev. den Thread als gelöst zu markieren - einfach gelöst an den Betreff anhängen.

Damit wird erreich, das auch andere Personen davon etwas haben und die Probleme über die Suchen des Forums bzw. Google einfacher gefunden werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Stephanie H.
Beiträge: 91
Registriert: Sa 6. Feb 2010, 15:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: HILFE !!! :D

Beitrag von Stephanie H. »

Danke !D
Ich versuch dann mal die Stringliste(n)
ach die andere personen können auch selber ein thema eröffnen...

Stephanie H.
Beiträge: 91
Registriert: Sa 6. Feb 2010, 15:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: HILFE !!! :D

Beitrag von Stephanie H. »

Uhh mist...
Ich hab das Thema in FreePascal gespeichert
obwohl das Lazarus ist...egal
wie kann man die überschrift denn ändern?

Stephanie H.
Beiträge: 91
Registriert: Sa 6. Feb 2010, 15:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: eine Variable in 2 Var. speichern <- gelöst !D

Beitrag von Stephanie H. »

das klappt alles nicht :(
Ihr wiist aber schon, dass ich ein Programm mit Delphi schreibe
aber nicht objektorienttiert, nee !!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: eine Variable in 2 Var. speichern HILFE !!!

Beitrag von pluto »

In diesen Punkt ist Lazarus und Delphi Identisch. Es gibt mehrere Möglichkeiten. Ich bevorzuge diese hier:

Code: Alles auswählen

p1:=0; w:=0;
    repeat
      p2:=PosEx('|',str,p1+1);
      if p2 > 0 then
        str2:=Copy(str,p1+1,p2-p1-1)
      else
        str2:=Copy(str,p1+1,Length(str)-p1);
     // hier musst du jetzt str2 deiner Variable zu weisen z.b. so:
     if w = 0 then str1:=str2;
    if w = 1 then str2:=str2; 
   // oder mit einem case.
      inc(w); p1:=p2;
    until p2 = 0;
Du musst außerdem noch bei PosExt das '|' in ' ' ändern Dann sollte es klappen. Du kannst wenn du mehrere werte hast diese auch in eine StringList speichern oder direkt in einem Dynamischen oder Statischen Array.
Eventuell musst du den Code noch weiter anpassen.

Du weißt aber das es hier ein Lazarus Forum ist ?
Für Delphi-Probleme sind diese Foren besser geeignet:
http://www.delphi-forum.de/" onclick="window.open(this.href);return false;
http://www.delphipraxis.net/" onclick="window.open(this.href);return false;
http://www.dsdt.info/" onclick="window.open(this.href);return false;
http://www.swissdelphicenter.ch/de" onclick="window.open(this.href);return false;
Es sei denn du möchtest Irgendwann Lazarus verwenden.

Edit01: Die LCL und die VLC sind alle OOP. Außerdem wäre es Praktisch / Nett, wenn du das Primäre Problem etwas genauer beschreiben könntest. Probleme haben wir alle. Der eine mehr der andere Weniger. Z.B. wenn es Fehler Meldungen gibt, diese hier Posten: Fehler Meldungen angeklickt, rechte Maustaste und in die Zwischenablage kopieren.
MFG
Michael Springwald

Antworten