![]() |
Werte aus String herausfiltern
Hallo,
Ich habe in einer Datei mehrere Werte gespeichert zb. eine Zahl 5 und 22 oder 76 etc. Es sind immer 3 in einer Reihe! Um sie in der Datei zu ordnen schreibe ich diese werte immer folgeendermaßen in die Datei: 1: 67 4 45 2: 45 62 43 ... Wie kann ich nun nur die Werte also 67 4 45 auslesen lassen so das ich mit ihnen weiter arbeiten kann?? |
Re: Werte aus String herausfiltern
Warum nimmst du kein File of Integer???
|
Re: Werte aus String herausfiltern
|
Re: Werte aus String herausfiltern
Warum schreibst du sie so auf? Schreibe doch einfach alle untereinander, dann brauchst du nur die jeweilige Zeile auszulesen.
Oder gleich ein Record mit Zahl1,zahl2,zahl3. :P |
Re: Werte aus String herausfiltern
hmm kapier das nicht kannst du mir das erklären?
|
Re: Werte aus String herausfiltern
Ist ne vorgabe damit man die werte schneller ändern kann! Is kleines Projekt von mir und paar Kumpels!
|
Re: Werte aus String herausfiltern
Die Record-Variante:
Delphi-Quellcode:
Meine Variante:
type TRecord = record
id: integer; //oder kleiner, wenn's ausreicht wert1, wert2, wert3: integer; end; {...} var datei: file of TRecord; werte: TRecord; wert1: TRecord; {...} read(datei, wert); //readln funzt hier nicht wert1:= werte.wert1;
Delphi-Quellcode:
var line: string;
temp: array of string; werte: array [0..2] of integer; datei: textfile; {...} Readln(datei, line); line:= Copy(temp, 3, length(line)); temp:= Split(' ', line); //evtl. anpassen! werte[0]:= StrToInt(temp[0]); werte[1]:= StrToInt(temp[1]); werte[2]:= StrToInt(temp[2]); |
Re: Werte aus String herausfiltern
[Fehler] formel.pas(86): Inkompatible Typen: 'String' und 'dynamic array'
Das kommt dann! |
Re: Werte aus String herausfiltern
Hallo Fredbert,
herzlich willkommen in der Delphi-PRAXiS. Lösungen können tendenziell nur so gut sein, wie die Problembeschreibung. Ohne Umschweife würde ich deine im Eröffnungsbeitrag gestellte Frage so beantworten:
Delphi-Quellcode:
Wenn die Datei für diese Vorgehensweise zu groß ist, dann musst du sie zeilenweise verarbeiten:
uses
Classes; var slLines, slValues: TStrings; fileName: string; i, iLines: integer; iSum: Int64; // Kleinere Dateien können komplett im Hauptspeicher verarbeitet werden begin // Container für die Textzeilen mit den drei Werten slLines := TStringList.Create; // Container für die Zerlegung einer Zeile in drei Werte slValues := TStringList.Create; slValues.Delimiter := ' '; // Dateiname ist erster Aufrufparameter fileName := ParamStr(1); // Datei Laden slLines.LoadFromFile(fileName); for iLines := 0 to Pred(slLines.Count) do begin // Zeile an Leerstellen zerlegen slValues.DelimitedText := slLines[iLines]; iSum := 0; // Zahlenwerte konvertieren und summieren for i := 0 to Pred(slValues.Count) do iSum := iSum + StrToInt(slValues[i]); // ... end; end;
Delphi-Quellcode:
Vielleicht gibt dir das ein paar Denkanstöße, wie du dein Problem lösen kannst. Code zum Überprüfen von möglichen Fehlern musst du selbst dazu schreiben.
var
f: TextFile; i, iValue: integer; iSum: Int64; begin AssignFile(f, fileName); Reset(f); while not Eof(f) do begin iSum := 0; for i := 1 to 3 do begin Read(f, iValue); iSum := iSum + iValue; end; ReadLn(f); end; CloseFile(f); end; Grüße vom marabu |
Re: Werte aus String herausfiltern
Habs hinbekommen aber anderst: (Code von
![]()
Delphi-Quellcode:
Aufrufen mit:
function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var SepLen: Integer; F, P: PChar; ALen, Index: Integer; begin SetLength(Result, 0); if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin SetLength(Result, 1); Result[0] := S; Exit; end; SepLen := Length(Separator); ALen := Limit; SetLength(Result, ALen); Index := 0; P := PChar(S); while P^ <> #0 do begin F := P; P := AnsiStrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); if Index >= ALen then begin Inc(ALen, 5); SetLength(Result, ALen); end; SetString(Result[Index], F, P - F); Inc(Index); if P^ <> #0 then Inc(P, SepLen); end; if Index < ALen then SetLength(Result, Index); end; zb:
Delphi-Quellcode:
Ich hoffe das hilft den Leuten die auch solche Probs hatten wie ich dabei!
f1 := explode('Bei welchem Zeichen soll getrennt werden', 'Welcher String soll getrennt werden', 0)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 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