Text-Dateien aus dem Data-Block einlesen[umständlich gelöst]

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Text-Dateien aus dem Data-Block einlesen[umständlich gelöst]

Beitrag von KatSeiko »

Hi zusammen,

Ich habe ein Problem, bei dem ihr mir vielleicht helfen könnt:

Ich kann mit IncludeBinary verschiedene Dateien in die DataSection einfügen. Unter Anderem möchte ich nun einige Textdateien einfügen, die (erstellt aus einem anderen Programm) die Signaturen (SHA1, MD5) von anderen Dateien enthält. Das Programm soll nun diese Dateien nun während der Laufzeit einlesen können. Ich möchte keine temporären Dateien anlegen..
Wie stelle ich das am Besten an? Irgendwelche Vorschläge?

Danke und MfG
Zuletzt geändert von KatSeiko am 05.09.2012 12:04, insgesamt 1-mal geändert.
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Text-Dateien aus dem Data-Block einlesen

Beitrag von ts-soft »

Code: Alles auswählen

; ==============================================================
; Created on:      04/09/2012 14:44
;
; App/Lib-Name:    Demo
; Author:          Thomas <ts-soft> Schulz
; Version:         1.0
; Compiler:        PureBasic 5.00 Beta 2 (Linux - x64)
; ==============================================================

EnableExplicit

DataSection
  TextFile:
  IncludeBinary "text.txt"
EndDataSection

Debug PeekS(?TextFile)
Ansonsten kann man diverse Dateien auch mit Catch... nutzen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Text-Dateien aus dem Data-Block einlesen

Beitrag von NicTheQuick »

Wäre das nicht sicherer?

Code: Alles auswählen

EnableExplicit

DataSection
  TextFile:
  IncludeBinary "text.txt"
  TextFileEnd:
EndDataSection

Debug PeekS(?TextFile, ?TextFileEnd - ?TextFile)
Sonst liest er noch nach der Textdatei Müll ein?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Text-Dateien aus dem Data-Block einlesen

Beitrag von ts-soft »

NicTheQuick hat geschrieben:Wäre das nicht sicherer?
Nach meiner bisherigen Erfahrung ist es nicht nötig, aber sicherer ist es schon, weil es gibt
ja noch Murphys Gesetz :mrgreen:

Codierung ist in dem Beispiel auch nicht berücksichtigt.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Re: Text-Dateien aus dem Data-Block einlesen

Beitrag von KatSeiko »

Hi,

Sagen wir, die Textdatei ist die hier:

Code: Alles auswählen

signature.txt
a3a07711bc3d7165b99b7e14f6565bde2dbc60f9
17b157ca38dcee6857f87e15b61655a4
Die Datei ist nun über IncludeBinary in der DataSection eingebunden.

Wie lese ich das in drei Variablen ein?

Danke und MfG
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Text-Dateien aus dem Data-Block einlesen

Beitrag von STARGÅTE »

Wie meine Vorposter es aufzeigten.

Den String (also die Zeilen + Umbrüche) kannst du dann mit StringField beim Umbruch zerteilen und in deinen Variablen speichern.

Du kannst auch "mein" PeekSN() nutzen.

Code: Alles auswählen

CompilerIf Defined(CharacterArray, #PB_Structure) = #False
   Structure CharacterArray : c.c[0] : EndStructure
CompilerEndIf

Procedure.s PeekSN(*Buffer.CharacterArray, *BufferPointer.Integer)
   Protected String.s, Index.i, EndOfLineLength.i = 1
   While *Buffer\c[Index]
      If *Buffer\c[Index] = #CR And *Buffer\c[Index+1] = #LF ; Windows
         EndOfLineLength = 2
         Break
      ElseIf *Buffer\c[Index] = #LF Or *Buffer\c[Index] = #CR ; Unix OR Mac
         Break
      EndIf
      Index + 1
   Wend
   *BufferPointer\i = *Buffer + SizeOf(Character)*(Index+EndOfLineLength)
  ProcedureReturn PeekS(*Buffer, Index)
EndProcedure

*Buffer = ?Signature
Debug PeekSN(*Buffer, @*Buffer)
Debug PeekSN(*Buffer, @*Buffer)
Debug PeekSN(*Buffer, @*Buffer)


DataSection
Signature:
Data.s "signature.txt"+#CRLF$+"a3a07711bc3d7165b99b7e14f6565bde2dbc60f9"+#CRLF$+"17b157ca38dcee6857f87e15b61655a4"
EndDataSection
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Text-Dateien aus dem Data-Block einlesen

Beitrag von NicTheQuick »

@Stargate:
Wieso so kompliziert mit zwei Parametern?

Code: Alles auswählen

CompilerIf Defined(CharacterArray, #PB_Structure) = #False
	Structure CharacterArray : c.c[0] : EndStructure
CompilerEndIf

Procedure.s PeekSN(*BufferPointer.Integer)
	Protected String.s, Index.i, EndOfLineLength.i = 1
	Protected *Buffer.CharacterArray = *BufferPointer\i
	While *Buffer\c[Index]
		If *Buffer\c[Index] = #CR And *Buffer\c[Index+1] = #LF ; Windows
			EndOfLineLength = 2
			Break
		ElseIf *Buffer\c[Index] = #LF Or *Buffer\c[Index] = #CR ; Unix OR Mac
			Break
		EndIf
		Index + 1
	Wend
	*BufferPointer\i = *Buffer + SizeOf(Character)*(Index+EndOfLineLength)
	ProcedureReturn PeekS(*Buffer, Index)
EndProcedure

*Buffer = ?Signature
Debug PeekSN(@*Buffer)
Debug PeekSN(@*Buffer)
Debug PeekSN(@*Buffer)

DataSection
	Signature:
	Data.s "signature.txt"+#CRLF$+"a3a07711bc3d7165b99b7e14f6565bde2dbc60f9"+#CRLF$+"17b157ca38dcee6857f87e15b61655a4"
EndDataSection
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Re: Text-Dateien aus dem Data-Block einlesen

Beitrag von KatSeiko »

Ich bin grad am Arbeitsplatz.. Würde das hier funktionieren:

Code: Alles auswählen

CompilerIf Defined(CharacterArray, #PB_Structure) = #False
   Structure CharacterArray : c.c[0] : EndStructure
CompilerEndIf

Procedure.s PeekSN(*BufferPointer.Integer)
   Protected String.s, Index.i, EndOfLineLength.i = 1
   Protected *Buffer.CharacterArray = *BufferPointer\i
   While *Buffer\c[Index]
      If *Buffer\c[Index] = #CR And *Buffer\c[Index+1] = #LF ; Windows
         EndOfLineLength = 2
         Break
      ElseIf *Buffer\c[Index] = #LF Or *Buffer\c[Index] = #CR ; Unix OR Mac
         Break
      EndIf
      Index + 1
   Wend
   *BufferPointer\i = *Buffer + SizeOf(Character)*(Index+EndOfLineLength)
   ProcedureReturn PeekS(*Buffer, Index)
EndProcedure

*Buffer = ?Signature
Debug PeekSN(@*Buffer)
Debug PeekSN(@*Buffer)
Debug PeekSN(@*Buffer)

DataSection
   Signature:
   IncludeBinary "signature.txt"
EndDataSection
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Text-Dateien aus dem Data-Block einlesen

Beitrag von ts-soft »

Nette Proceduren, aber das ein BOM vorhanden sein könnte, bzw. eine andere Codierung vorliegt, wird nicht
berücksichtigt :wink: , schließlich möchte er ja eine Textdatei includieren und keine Data.s!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Re: Text-Dateien aus dem Data-Block einlesen

Beitrag von KatSeiko »

Leider hat PureBasic keine Funktion wie "CatchFile" in der Funktionsweise wie CatchXML.. :(
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Antworten