Seite 1 von 2

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

Verfasst: 04.09.2012 14:16
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

Re: Text-Dateien aus dem Data-Block einlesen

Verfasst: 04.09.2012 14:46
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.

Re: Text-Dateien aus dem Data-Block einlesen

Verfasst: 04.09.2012 15:31
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?

Re: Text-Dateien aus dem Data-Block einlesen

Verfasst: 04.09.2012 15:45
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

Re: Text-Dateien aus dem Data-Block einlesen

Verfasst: 04.09.2012 16:18
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

Re: Text-Dateien aus dem Data-Block einlesen

Verfasst: 04.09.2012 16:26
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

Re: Text-Dateien aus dem Data-Block einlesen

Verfasst: 04.09.2012 16:32
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

Re: Text-Dateien aus dem Data-Block einlesen

Verfasst: 04.09.2012 16:41
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

Re: Text-Dateien aus dem Data-Block einlesen

Verfasst: 04.09.2012 16:44
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!

Re: Text-Dateien aus dem Data-Block einlesen

Verfasst: 04.09.2012 17:03
von KatSeiko
Leider hat PureBasic keine Funktion wie "CatchFile" in der Funktionsweise wie CatchXML.. :(