AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Werte aus String herausfiltern

Ein Thema von Fredbert · begonnen am 18. Okt 2005 · letzter Beitrag vom 20. Okt 2005
Antwort Antwort
Fredbert

Registriert seit: 18. Okt 2005
13 Beiträge
 
#1

Werte aus String herausfiltern

  Alt 18. Okt 2005, 12:17
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??
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Werte aus String herausfiltern

  Alt 18. Okt 2005, 13:01
Warum nimmst du kein File of Integer???
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Phistev
(Gast)

n/a Beiträge
 
#3

Re: Werte aus String herausfiltern

  Alt 18. Okt 2005, 13:02
Nutze Delphi-Referenz durchsuchenCopy, Explode / Split und StrToInt (in der Reihenfolge).
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#4

Re: Werte aus String herausfiltern

  Alt 18. Okt 2005, 13:05
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.
  Mit Zitat antworten Zitat
Fredbert

Registriert seit: 18. Okt 2005
13 Beiträge
 
#5

Re: Werte aus String herausfiltern

  Alt 18. Okt 2005, 13:08
hmm kapier das nicht kannst du mir das erklären?
  Mit Zitat antworten Zitat
Fredbert

Registriert seit: 18. Okt 2005
13 Beiträge
 
#6

Re: Werte aus String herausfiltern

  Alt 18. Okt 2005, 13:09
Ist ne vorgabe damit man die werte schneller ändern kann! Is kleines Projekt von mir und paar Kumpels!
  Mit Zitat antworten Zitat
Phistev
(Gast)

n/a Beiträge
 
#7

Re: Werte aus String herausfiltern

  Alt 18. Okt 2005, 13:19
Die Record-Variante:
Delphi-Quellcode:
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;
Meine Variante:
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]);
  Mit Zitat antworten Zitat
Fredbert

Registriert seit: 18. Okt 2005
13 Beiträge
 
#8

Re: Werte aus String herausfiltern

  Alt 19. Okt 2005, 07:27
[Fehler] formel.pas(86): Inkompatible Typen: 'String' und 'dynamic array'

Das kommt dann!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Werte aus String herausfiltern

  Alt 19. Okt 2005, 09:13
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:
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;
Wenn die Datei für diese Vorgehensweise zu groß ist, dann musst du sie zeilenweise verarbeiten:

Delphi-Quellcode:
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;
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.

Grüße vom marabu
  Mit Zitat antworten Zitat
Fredbert

Registriert seit: 18. Okt 2005
13 Beiträge
 
#10

Re: Werte aus String herausfiltern

  Alt 20. Okt 2005, 12:42
Habs hinbekommen aber anderst: (Code von jbg aus der CodeLibary)

Delphi-Quellcode:
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;
Aufrufen mit:

zb:

f1 := explode('Bei welchem Zeichen soll getrennt werden', 'Welcher String soll getrennt werden', 0) Ich hoffe das hilft den Leuten die auch solche Probs hatten wie ich dabei!
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:29 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