Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datenimport von Zahlen einer seltsamen Datei (https://www.delphipraxis.net/103159-datenimport-von-zahlen-einer-seltsamen-datei.html)

turbocounter 11. Nov 2007 14:57


Datenimport von Zahlen einer seltsamen Datei
 
Hallo,

ich habe eine Datei, die keine Dateiendung hat. Wenn ich an diese nun ".txt" dranhänge, bekomme ich sowas zu sehen:http://home.arcor.de/turbocounter/tc/geld.jpg.
Es soll sich dabei um Artikel handeln, der erste kostet: 52.50, der zweite 94.11 usw.

Wie kann ich jetzt diese Werte in ein dynaisches Array bringen? Also ich denk mal da brauch ich eine Schleife, die weiß, dass dieses komische Viereck den nächsten Wert andeutet?
am Ende sollte es so aussehen:
artikel[1] = 52.50
artikel[2] = 94.11
...
Aber wie setzte ich das mit dem TOpenDialog und das dynamische Array um?
Danke für Ratschläge
tc

mkinzler 11. Nov 2007 15:06

Re: Datenimport von Zahlen einer seltsamen Datei
 
Das Quadrat ist ein Sonderzeichen, wenn es immer das selbe ist kannst du es als Trennzeichen verwenden.

turbocounter 11. Nov 2007 15:09

Re: Datenimport von Zahlen einer seltsamen Datei
 
aber wie funktioniert das genau? ich bin leider noch anfänger.

DeddyH 11. Nov 2007 15:12

Re: Datenimport von Zahlen einer seltsamen Datei
 
Auf den ersten Blick drängt sich mir den Verdacht auf, dass es sich um eine typisierte Datei handelt. Versuch es mal so (ungetestet):
Delphi-Quellcode:
type TBetrag = string[5];

procedure Einlesen;
var BetrArray: array of TBetrag;
    Betr: TBetrag;
    f: file of TBetrag;
begin
  SetLength(BetrArray,0);
  AssignFile(f,'Geld.txt');
  {$I-}
  Reset(f);
  {$I+}
  if IOResult = 0 then
    begin
      while not EOF(f) do
        begin
          read(f,Betr);
          SetLength(BetrArray,Length(BetrArray) + 1);
          BetrArray[Pred(Length(BetrArray))] := Betr;
        end;
      CloseFile(f);
    end;
end;

Dax 11. Nov 2007 15:13

Re: Datenimport von Zahlen einer seltsamen Datei
 
Für mich sieht es aus, als sei dies ein Ausschnitt einer Materialdatei zu BWInf Aufgabe 2, denn die hat, sofern ich mich erinnere, Unix-Newlines.

mkinzler 11. Nov 2007 15:14

Re: Datenimport von Zahlen einer seltsamen Datei
 
Einfach per Stringliste:

Delphi-Quellcode:
var
  sl: TStrings;
...
begin
...
  sl := TStringList.Create;
  sl.Delimiter := <Trennzeichen>;
  sl.DelimitedText := <Text>;
  ...
  zahl1 := sl.Strings[0];
  zahl2 := sl.Strings[1];

turbocounter 11. Nov 2007 15:30

Re: Datenimport von Zahlen einer seltsamen Datei
 
hey danke für eure beiden vorschläge/alternativen
mkinzler sei mir nicht böse ich probier erstmal den von DeddyH, obwohl ich da nicht wirklich durchblicke, allerdings ist das Array schon bei ihm schon fertig.

DeddyH 11. Nov 2007 15:32

Re: Datenimport von Zahlen einer seltsamen Datei
 
*Ähm*, bedenke aber, dass das eine lokale Variable ist (nur zum Testen), Du müsstest sie also global definieren, falls es funktioniert.

thkerkmann 11. Nov 2007 15:36

Re: Datenimport von Zahlen einer seltsamen Datei
 
Also ich würde mir das mal in einem Hexeditor ansehen.
Ich glaube auch, dass dieses Kästchen ein LF sein könnte.
Dann kannste das wahrscheinlich gleich in eine Stringliste einlesen.

Delphi-Quellcode:
myStringlist.LoadFromFile( Dateiname );
Gruss

DeddyH 11. Nov 2007 15:42

Re: Datenimport von Zahlen einer seltsamen Datei
 
Es würde ja genügen, die ersten 5 Zeichen der Datei einzulesen und sich mit Ord mal den ASCII-Code des 5.Zeichens anzeigen zu lassen.

grenzgaenger 11. Nov 2007 15:45

Re: Datenimport von Zahlen einer seltsamen Datei
 
das ganze sieht so aus, als ob es sich um ein #13 oder #10 handelt. versuch die datei mal in einen anderen editor zu öffnen, vielleicht gibts da 'ne brauchbare darstellung... was ich vermute...

in aller regel, sollte das lesen keine probleme bereiten, wenn du mit readln versuchst diese datei zu lesen...

ausserdem kannst dir mal ansehen, wie die datei im hex editor aussieht... denke, der sollte das rätsel lösen ... :-)

HTH GG

DeddyH 11. Nov 2007 15:47

Re: Datenimport von Zahlen einer seltsamen Datei
 
Einfach mal in Wordpad öffnen.

grenzgaenger 11. Nov 2007 15:49

Re: Datenimport von Zahlen einer seltsamen Datei
 
Zitat:

Zitat von Dax
Für mich sieht es aus, als sei dies ein Ausschnitt einer Materialdatei zu BWInf Aufgabe 2, denn die hat, sofern ich mich erinnere, Unix-Newlines.

tja
  • unix #10
  • mac #13
  • DOS #10#13 (oder war es umgedreht)...
readln, kommt mit der unix notation klar... bei der mac, weiss ich es nicht...

turbocounter 11. Nov 2007 16:24

Re: Datenimport von Zahlen einer seltsamen Datei
 
also der Vorschlag von DeddyH klappt so nicht. Das array wird zwar wunderschön dynamisch aufgebaut, jedoch ist Inhalt, z.B. Betrarray[1] = 52.50 $a#. Das $a# stört natürlich. Ich habe mal probiert das Viereck wegzumachen, dann könnte man deken(wie Deddy es tat) ich nehme mir die ersten 5 zeichen für den ersten Wert, die nächsten fünf für den zweiten usw. das geht aber nicht weil es auch artikel gibt die 7.63 und nicht 70.63 kosten.

Ich muss also dieses Viereck irgendwie als Trennzeichen nehmen, ob das mit "myStringlist.LoadFromFile( Dateiname );" (danke an thkerkmann) einfach so geht, weiß ich nicht, aber ich will ja keine Stringliste sondern ein array, wo die Beträge drinnestehen.

Welchen Datentyp im Array ist ist erstmal nicht so wichtig, noch ist mir die Effizienz halbwegs uninteressant.
Also was muss bei Deddys Quelltext geändert werden, oder wie kann man in das array die idee von thkerkmann einbauen?
Danke euch.

Hier gibt es die Datei: http://www.wikifortio.com/221619/pj-10

DeddyH 11. Nov 2007 16:28

Re: Datenimport von Zahlen einer seltsamen Datei
 
Wenn ich mir das Bild im ersten Beitrag ansehe, gibt es da einen Eintrag [Blank]9.01. Also sollten die Einträge schon gleich lang sein, oder ich habe einen Denkfehler.

DeddyH 11. Nov 2007 16:31

Re: Datenimport von Zahlen einer seltsamen Datei
 
Die Datei lässt sich problemlos in ein Memo einlesen.

turbocounter 11. Nov 2007 16:33

Re: Datenimport von Zahlen einer seltsamen Datei
 
und wie muss ich deinen code ändern, damit das klappt? Muss ich .txt weglassen? lag es vllt daran?
Danke für deine Hilfe!

DeddyH 11. Nov 2007 16:36

Re: Datenimport von Zahlen einer seltsamen Datei
 
Muss es unbedingt ein dynamisches Array sein?

turbocounter 11. Nov 2007 16:38

Re: Datenimport von Zahlen einer seltsamen Datei
 
also wenn man schon die anzahl der artikel aus der datei auslesen könnte dann könnte man das array auch statisch machen.

DeddyH 11. Nov 2007 16:39

Re: Datenimport von Zahlen einer seltsamen Datei
 
Ich meinte, ob man statt des Arrays nicht lieber eine TStringList nehmen kann.

turbocounter 11. Nov 2007 16:40

Re: Datenimport von Zahlen einer seltsamen Datei
 
hm ne damit kenn ich mich nicht aus. aber ich verwende prozeduren, die ich so geschrieben habe, dass diese mit einem array arbeiten.

DeddyH 11. Nov 2007 16:44

Re: Datenimport von Zahlen einer seltsamen Datei
 
Du brauchst die Zahlen als Zahlen oder als String?

turbocounter 11. Nov 2007 16:45

Re: Datenimport von Zahlen einer seltsamen Datei
 
zahlen bitte.

grenzgaenger 11. Nov 2007 16:46

Re: Datenimport von Zahlen einer seltsamen Datei
 
Liste der Anhänge anzeigen (Anzahl: 1)
also bei mir funktioniert das ganze problemlos ... wo lliegt das problem, bei deiner hausaufgabe....??

Delphi-Quellcode:
program mist;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
 f: text;
 s: string;
begin
 assign(f, 'pj-10');
 reset(f);
 while not eof(f) do
 begin
  readln(f, s);
  writeln(s);
 end;
 close(f);
 readln;
end.
Edit: mal noch die datei hinzufüg:

DeddyH 11. Nov 2007 16:46

Re: Datenimport von Zahlen einer seltsamen Datei
 
Hier mein Testprojekt:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    DynArray: array of double;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var sList: TStringList;
    Eintrag: string;
    i: integer;
begin
  SetLength(DynArray,0);
  sList := TStringList.Create;
  try
    sList.LoadFromFile('C:\pj-10'); //Dateinamen anpassen
    SetLength(DynArray,sList.Count);
    for i := 0 to sList.Count - 1 do
      begin
        Eintrag := StringReplace(sList[i],'.',DecimalSeparator,[]);
        DynArray[i] := StrToFloat(Eintrag);
      end;
  finally
    sList.Free;
  end;
end;

end.

grenzgaenger 11. Nov 2007 16:47

Re: Datenimport von Zahlen einer seltsamen Datei
 
wenn du probleme mit dem konvertieren der zahlen hast, mach bitte 'n neuen thread auf ...

turbocounter 11. Nov 2007 16:49

Re: Datenimport von Zahlen einer seltsamen Datei
 
ok danke deddyh.

Nuclear-Ping 11. Nov 2007 18:05

Re: Datenimport von Zahlen einer seltsamen Datei
 
@turbo:

Wenn da $a steht, ist es ein Zeilenumbruch.

Beschäftige dich doch z.B. mal mit dem was z.B. mkinzler dir gezeigt hat. Da hast du mit 3 Zeilen Code die Datei eingelesen. Delphi-Hilfe von TStringList angucken!
Delphi-Quellcode:
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := Chr($a);
    sl.LoadFromFile ('C:\...');
    showmessage (Trim (sl[0]));
    showmessage (Trim (sl[1]));
  finally
    FreeAndNil (sl);
  end;
end;
Ist in meinen Augen "komfortabler", als die Datei manuell auszulesen.

grenzgaenger 11. Nov 2007 18:44

Re: Datenimport von Zahlen einer seltsamen Datei
 
denke, das nimmt sich nicht viel. man muss ja nix konvertieren :twisted:


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