November 28, 2020, 11:22:23 AM

Author Topic: [bmx] txt2string by CS_TBL [ 1+ years ago ]  (Read 526 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bmx] txt2string by CS_TBL [ 1+ years ago ]
« on: June 29, 2017, 12:28:42 AM »
Title : txt2string
Author : CS_TBL
Posted : 1+ years ago

Description : Converts a textfile into a string, including newlines and quotes. This way you can store a textfile into a string and thus store textfiles into your source.. kinda like an alternative incbin.

update: tabs added, closefile added, escape-bug fixed, 'no-textformat'-option added


Code :
Code: BlitzMax
  1. SuperStrict
  2.  
  3. DebugLog Chr(10)+Chr(10)+txt2string("C:Somefilessomefile.txt","Local MyText$",-1,64)+Chr(10)+Chr(10)
  4.  
  5. End
  6.  
  7. Function txt2string$(file$,varname$="Local MyText$",ndx:Int=-1,width:Int=0)
  8.  
  9. Rem
  10.         txt2string$, by CS_TBL
  11.        
  12.         This function converts a textfile to a string.
  13.        
  14.         command:
  15.        
  16.         parsedtext=txt2string$(file$,varname$,ndx,width)
  17.        
  18.         file$           - the full path of a file (e.g. "C:My Documentslahblah.txt")
  19.         varname$        - optional, the name of the variable
  20.         ndx                     - optional, if >=0 then the variable is an array, and ndx is its index
  21.         width           - optional, the width of the formatted stringparts, width<1 doesn't format
  22.                                 - in case of formatting, a line *can* incidentally be one character longer due
  23.                                 - not being allowing to break escapes
  24.        
  25.         If you want to create a new variable, don't forget to add 'Local ' in the varname!
  26.         (e.g. bla$=txt2string(file$,"Local MyText")
  27.        
  28. EndRem
  29.  
  30.         If file="" Return "<no file given>"    
  31.        
  32.         Local tmp:TStream=ReadFile(file)
  33.         If Not tmp
  34.                 tmp=Null
  35.                 Return "<no file found>"
  36.         EndIf
  37.         CloseFile tmp
  38.        
  39.         Local bank:TBank=LoadBank(file)
  40.        
  41.         If BankSize(bank)=0
  42.                 bank=Null
  43.                 Return "<no data found>"
  44.         EndIf
  45.        
  46.         Local text$
  47.         Local decent$
  48.        
  49.         Local t:Int,v:Int,w:Int
  50.        
  51.         ' make the string content
  52.        
  53.         For t=0 To BankSize(bank)-1
  54.                 v=PeekByte(bank,t)             
  55.                 Select v
  56.                         Case 9
  57.                                 text:+"~~t"
  58.                         Case 10
  59.                                 text:+"~~n"
  60.                         Case 13
  61.                                 text:+"~~r"
  62.                         Case 34
  63.                                 text:+"~~q"
  64.                         Default
  65.                                 text:+Chr(v)
  66.                 End Select     
  67.         Next
  68.        
  69.         ' now split-up into something decent
  70.        
  71.         decent:+varname ' the filename
  72.        
  73.         If ndx>=0 decent:+"["+ndx+"]" ' optional array-index
  74.        
  75.         If width<1
  76.                 decent:+"=~q"
  77.                 decent:+text
  78.         Else
  79.                 decent:+"=.."
  80.                 For t=0 To Len(text)-1
  81.                         If Not (w Mod width) ' newline
  82.                                 If t>0
  83.                                         If Asc(Right(decent,1))=126 ' an escape we shouln't break?
  84.                                                 decent:+Mid(text,t+1,1)+Chr(34)+"+.."
  85.                                         Else ' no? just continue then..
  86.                                                 decent:+Chr(34)+"+.."                          
  87.                                         EndIf
  88.                                 EndIf
  89.                                 decent:+Chr(10)+Chr(34)
  90.                         EndIf
  91.                         decent:+Mid(text,t+1,1)
  92.                         w:+1
  93.                 Next
  94.         EndIf
  95.                
  96.         decent:+Chr(34) ' and the closing quote!
  97.        
  98.         bank=Null
  99.         Return decent
  100. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal