Autor Beitrag
CaptManu
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 28.03.09 14:38 
Hallo, ich habe schon ewig gesucht, doch leider noch nichts gefunden.


Problem ist, ich habe die Nasa Höhendaten von hier:
e0srp01u.ecs.nasa.go...sion2/SRTM3/Eurasia/ bspw
e0srp01u.ecs.nasa.go...asia/N55E061.hgt.zip



Das sind Dateien mit einer Zeile von 2884802 ASCI Zeichen. (1 Byte Zeichen, also auch Leerzeichen, Zeilenumbruch, Steuerzeichen,....)

Ich müsste die Zeichen irgendwie einlesen können. Es würde reichen, wenn ich bspw. wüsste: Zeichen an der Stelle 2310 = 'ö' oder 567982 = Umbruch


Ich hatte schon versucht, es mit einem TStringlist.Loadfromfile zu versuchen. Da passiert nichts und das TstringList bleit leer. Des Weiteren glaube ich nicht, dass das Tstringlist mit dem Umbruch und Sonderzeichen zu Recht kommen würde.

Ich dachte schon an die Möglichkeit mit „Array [0..2884802] of Char“ zu arbeiten. Ich weiß nur nicht, ob Char auch wirklich die 256 möglichen Werte (inklusive Zeilenumbruch) aufnehmen kann, und wie ich die Datei in ein solches Arry laden kann.


für Ideen bin ich sehr dankbar.

vg CaptManu


Zuletzt bearbeitet von CaptManu am Sa 28.03.09 14:42, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.03.09 14:42 
Nimm einen TFileStream + Position, kopiere den ggf. in einen TMemoryStream damits schneller geht.

Oder nimm AssignFile, Reset, (FileSeek, Read, ggf. Read oder beides wiederholen), CloseFile.
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Sa 28.03.09 15:52 
user profile iconCaptManu hat folgendes geschrieben Zum zitierten Posting springen:

Ich weiß nur nicht, ob Char auch wirklich die 256 möglichen Werte (inklusive Zeilenumbruch) aufnehmen kann

Ob Char alle Zeichen des ASCII-Zeichensatzes enthalten kann? Ja natürlich! Genau das ist ja Char...

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.03.09 16:23 
Trotzdem ist eine TStringList keine sinnvolle Lösung. Bei so großen Dateien würde das unnötig langsam werden. Da sind die anderen Methoden bedeutend schneller, wenn es um zeichenweisen Zugriff geht.
CaptManu Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 28.03.09 23:07 
Ich danke schon einmal für die Antworten.

Aber irgendwie bekomme ich das mit TFileStream noch nicht ganz hin, dass nur bestimmte Zeichen eingelesen werden. Kannst du das bitte für so einen Anfänger wie mich ein bissel genauer beschreiben?

Danke dir schonmal ganz herzlich!
vg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.03.09 23:28 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  i: Integer;
  CurChar: Char;
  MyFile: TFileStream;
begin
  MyFile := TFileStream.Create(Pfad + Dateiname, fmOpenRead);
  try
    for i := 1 to MyFile.Size do
    begin
      MyFile.Read(CurChar, SizeOf(CurChar));
      ShowMessage(CurChar);
    end;
  finally
    MyFile.Free;
  end;
end;
So liest du die Buchstaben ein und zeigst sie per ShowMessage an. Stattdessen könntest du sie dann z.B. analysieren.

Und wie gesagt könnte es sinnvoll sein einen TMemoryStream zu benutzen.
CaptManu Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 28.03.09 23:38 
Der fängt doch aber immer beim ersten Zeichen an auszugeben?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.03.09 23:42 
Ja, wenn du zu einem bestimmten gehen willst, dann musst du die Eigenschaft Position entsprechend setzen und dann von dort aus lesen.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: So 29.03.09 00:49 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  data: array of Char;
  file: TFileStream;
begin
  SetLength(data, 2884802);
  file = TFileStream.Create('N55E061.hgt', fmOpenRead);
  try
    file.Read(data[0], Length(data));
  finally
    file.Free();
  end;
  // Zugriff dann wie gewohnt über data[0..2884801]
end;
Wenn du anschließend ohnehin Ord() benutzt, weil du in wirklichkeit keine Zeichen einliest, sondern Zahlen, dann kannst du auch gleich ein array of Byte nehmen.

Alternative: Memory Mapped File.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: So 29.03.09 03:37 
Das Format ist hier unter 3.1 beschrieben, nix mit Zeile oder so: einfach nur Bytes hinter einander weg.

Du liest also einfach die per Stream in ein 2-Dimensionales, quadratisches Array of Word, drehst die Byte-Order um und kannst dann die Felder direkt als 'nnn Meter' interpretieren.

Ich hab selber einen SRTM-Viewer geschrieben... ggf. kann ich dir die relevanten Teile mal raussuchen.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
CaptManu Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 30.03.09 14:29 
Vielen Dank an alle!

Wie die Geschwindigkeit nun aussieht muss ich erst noch testen, aber der Zugriff ist schon einmal wunderbar.

vielen Dank