Compiling Prob with OpenFileRequester & SaveFileRequester :

Everything else that doesn't fall into one of the other PB categories.
vmars316
Enthusiast
Enthusiast
Posts: 474
Joined: Fri Jun 29, 2012 12:24 am
Contact:

Compiling Prob with OpenFileRequester & SaveFileRequester :

Post by vmars316 »

Hello & Thanks ;
I posted this in the "Coding Questions" Forum ,
but got no answers , so Thought I would try it here:

I am having a Problem with OpenFileRequester & SaveFileRequester :
Problems when compiling Test-Occurences.pb :

When I open this file "Test-Occurences-01.pb"
from this folder ...\BUTTONS\Strip-Html-Elements
into PB compiler , all appears well .
And when I click on Open Folder all is well .
But when I compile a program from same Folder ,
all is well , until I open OpenFileRequester & SaveFileRequester .
The *Requester opens up in the
"C:\Users\vmars\Desktop\Downloads" Folder .
And then the the TaskManager show a "not responding" message .

I have been working with this same program & Folder many times ,
including today , with no probs .
But all of a sudden this started to happen .
I tried a system Restart , but it made no difference .

I tried to open the "Set Defut Target" Compiler option .
But it doesn't work .

When I compiled an executable , things work fine .
Also , MessageRequester("" , "CurrentDIR$ = " + CurrentDIR$ )
shows the correct folder .

Here are my two *FileRequester Codes :

Code: Select all

Code:
 Procedure OpenInputFile() ; |All files (*.*)|*.*
   MessageRequester("  " , " OpenInputFile() " )
   MessageRequester("" , "CurrentDIR$ = " + CurrentDIR$ )
   ClearGadgetItems(EditArea)   
   InputFileIsOpen = InputFileIsOpen + 1
   If InputFileIsOpen > 1 : CloseFile(2) : InputFileIsOpen = 0
   EndIf
  StandardFile$ = "*.html"   ; set initial file+path to display
  Pattern$ = "Html (*.html)|*.html;*.html|Text (*.txt)|*.txt"
  Pattern = 0    ; use the first of the three possible patterns as standard
  OpenThisFilename$ = OpenFileRequester("Please choose file to load", StandardFile$, Pattern$, Pattern)
  If OpenThisFilename$
    MessageRequester("Information", "You have selected following file:" + Chr(10) + OpenThisFilename$, 0)
  Else
    MessageRequester("Information", "The requester was canceled.", 0)
  EndIf
  ReadFile(2, OpenThisFilename$)
Repeat
  CheckThisLine()
Until Eof(2)
EndProcedure ; OpenInputFile()

And

Code: Select all

Code:
Procedure SaveAsHtml()
    MessageRequester("" , "SaveAsHtmlBtn")
  StandardFile$ = "Extracted-File.html"   ; set initial file+path to display
  Pattern$ = "Html (*.html)|*.html;*.txt|Text (*.txt)|*.txt|All files (*.*)|*.*"
  Pattern = 0    ; use the first of the three possible patterns as standard
  OutputFileName$ = SaveFileRequester("Please choose file to save", StandardFile$, Pattern$, Pattern)
  If OutputFileName$
    MessageRequester("Information", "You have selected following file:"+Chr(10) + OutputFileName$ , 0 )
  Else
    MessageRequester("Information", "The requester was canceled.", 0)
  EndIf
  If OutputFileName$ = ""
    MessageRequester("OutputFileName$ = " , "Can't SAVE FILE Until You Enter A FileName .")
    Goto SaveAsHtmlExit
  EndIf   
  EditorAreaItemsCOUNT = CountGadgetItems(EditorArea) + 1
    MessageRequester("EditorArea = " , "EditorAreaItemsCOUNT = " + Str(EditorAreaItemsCOUNT) )
  If EditorAreaItemsCOUNT < 1
    MessageRequester("EditorArea = " , "Nothing To SAVE In EditorArea ?")
    Goto SaveAsHtmlExit   
  EndIf
  EditorAreaItemsCOUNT2 = 0
 
    EditorAreaItemsCOUNT = CountGadgetItems(EditorArea)
    If CreateFile(1, OutputFileName$) ; If file can be created...
      For k = 0 To EditorAreaItemsCOUNT - 1
        WriteStringN(1, GetGadgetItemText(EditorArea, k ) )
        Next
    CloseFile(1)
  Else   
    MessageRequester("OpenFile(1,  ", "Can't Open File Listings.txt")   
  EndIf
SaveAsHtmlExit: 
EndProcedure  ; SaveAsHtmlBtn() 
Is there a way to tell the compiler do *FileRequester functions in this CurrentDir Folder only ?
Here is the complete program code (201 lines) .

Code: Select all

; https://www.purebasic.fr/english/ 
;TODO Vertical Scroll for EditArea , check if Valeria's deposit cast me $18.xx 
;
Global HtmlLineIn$ = "<h5>Hello-5 </h5> <p>This is Elm 1</p> <p>This is Elm 2</p> <h6>Hello-6<>" + Chr(10) + Chr(13) + 
                     "<h5>Hello-5 </h5> <p>This is Elm 1</p> <p>This is Elm 2</p> <h6>Hello-6<>"                      
Global StartingHtmlElement$ = "<p" , EndingHtmlElement$ = "</p>"
Global LEN_StartingHtmlElement = Len(StartingHtmlElement$) , LEN_EndingHtmlElement = Len(EndingHtmlElement$)
Global Starting_HitsCount , Ending_HitsCount , OutputLines$
Global OpenWindow_0 , EditorArea , EditorAreaItemsCOUNT , StartTagStr , EndTagStr , ExtractBtn ,
       SaveAsHtmlBtn , ExitBtn , HelpBtn , OpenInputBtn , 
       OpenThisFilename$  , EndOfProgram$ = "no" , InputFileIsOpen = 0 ,Result = 0 , 
       OutputFileName$ , OutputFileIsOpen = 0 , CurrentDIR$ = GetCurrentDirectory()  
;
Declare CheckThisLine()
Declare FindStrings()
Declare Occurrences(source$,string$,_Case)
Declare OpenInputFile()
Declare OpenWindow_0(x = 0, y = 0, width = 600, height = 575)
Declare SaveAsHtml()
;
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 575)
  Window_0 = OpenWindow(#PB_Any, x, y, 600, 575, "Collect Html by TAG", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget| #PB_Window_TitleBar  | #PB_Window_SizeGadget | #PB_Window_ScreenCentered )
  
  FirstContainer = ContainerGadget(#PB_Any, 10, 6, 580, 50, #PB_Container_Single )
  StartTagStr = StringGadget(#PB_Any, 16, 10, 60, 25, "<p")
  GadgetToolTip(StartTagStr, "Enter START TAG  <p  gets better results than  <p>")
  SetGadgetColor(StartTagStr, #PB_Gadget_FrontColor,RGB(64,0,64))
  EndTagStr = StringGadget(#PB_Any, 89, 10, 60, 25, "</p>")
  GadgetToolTip(EndTagStr, "Enter Full End Tag , like this </p> .")
  SetGadgetColor(EndTagStr, #PB_Gadget_FrontColor,RGB(0,0,0))
  SetGadgetColor(EndTagStr, #PB_Gadget_BackColor,RGB(255,255,255))
  ExtractBtn = ButtonGadget(#PB_Any, 200, 10, 80, 25, "Extract")
  SaveAsHtmlBtn = ButtonGadget(#PB_Any, 300, 10, 86, 25, "Save As Html")
  GadgetToolTip(SaveAsHtmlBtn, "Ok , It's Looking Good , Lets Save It Now !")
  ExitBtn = ButtonGadget(#PB_Any, 436, 10, 80, 25, "Exit") 
  HelpBtn = ButtonGadget(#PB_Any, 526, 10, 40, 25, "?")
  CloseGadgetList()
  
  EditorArea = EditorGadget(#PB_Any, 10, 80, 580, 475, #ES_MULTILINE|#ES_AUTOVSCROLL|#WS_VSCROLL|#WS_HSCROLL ) 
  GadgetToolTip(EditorArea, "This Is Where We Build The Html Page")
 EndProcedure ; OpenWindow_0  
;
 Procedure OpenInputFile() ; |All files (*.*)|*.*
   MessageRequester("  " , " OpenInputFile() " )
   MessageRequester("" , "CurrentDIR$ = " + CurrentDIR$ ) 
   ClearGadgetItems(EditArea)   
   InputFileIsOpen = InputFileIsOpen + 1 
   If InputFileIsOpen > 1 : CloseFile(2) : InputFileIsOpen = 0
   EndIf 
  StandardFile$ = "*.html"   ; set initial file+path to display
  Pattern$ = "Html (*.html)|*.html;*.html|Text (*.txt)|*.txt"
  Pattern = 0    ; use the first of the three possible patterns as standard
  OpenThisFilename$ = OpenFileRequester("Please choose file to load", StandardFile$, Pattern$, Pattern)
  If OpenThisFilename$
    MessageRequester("Information", "You have selected following file:" + Chr(10) + OpenThisFilename$, 0)
  Else
    MessageRequester("Information", "The requester was canceled.", 0) 
  EndIf
  ReadFile(2, OpenThisFilename$) 
Repeat
  CheckThisLine()
Until Eof(2)
EndProcedure ; OpenInputFile()
; 
Procedure Occurrences(source$,string$,_Case)
;  MessageRequester("" , "Occurrences()    " + "source$ = " + source$ + Chr(10) + Chr(13) + 
;                        "string$ = " + string$ ) 
  pos = 1
  Repeat
    If _Case=0
      f=FindString(LCase(source$),LCase(string$),pos)
    Else
      f=FindString(source$,string$,pos)
    EndIf
    If f<>0 : r=r+1 : pos=f+Len(string$) : EndIf
  Until f=0
  ProcedureReturn r
EndProcedure ; Occurrences()
;
Procedure CheckThisLine() ;   HtmlLineIn$ = ReadString(2 ) 
;  MessageRequester("  " , " CheckThisLine() " + "  = ReadString(2 )" ) 
  StartingHtmlElement$ = GetGadgetText (StartTagStr)
  EndingHtmlElement$ = GetGadgetText (EndTagStr)
  
  HtmlLineIn$ = ReadString(2 ) 
;  MessageRequester("" , "CheckThisLine()    " + "StartingHtmlElement$ = " + StartingHtmlElement$ ) 
  Starting_HitsCount = Occurrences(HtmlLineIn$ , StartingHtmlElement$ , 0) ; Case-sense off.
  Ending_HitsCount = Occurrences(HtmlLineIn$ , EndingHtmlElement$ , 0)     ; Case-sense off.
  If Starting_HitsCount = 0 And Ending_HitsCount = 0 : Goto NoHitsExitThisLine : EndIf 
  If Starting_HitsCount <> Ending_HitsCount
    MessageRequester("" , "Nmber Of  Starting and Ending  TAG  HitCounts are UN-equal may give bizarre resulte" + 
                          Chr(10) + Chr(13) + Str( Starting_HitsCount) + "    " + Str(Ending_HitsCount) ) 
    Goto EofExitCheckThisLine  
  EndIf 
  If Starting_HitsCount = 0  And  Ending_HitsCount = 0 
    MessageRequester("  " , " Starting_HitsCount = 0  And  Ending_HitsCount = 0  ")
    Goto NoHitsExitThisLine 
  EndIf 
;  MessageRequester("" , "Got A Hit People" + 
;                        Chr(10) + Chr(13) + "Starting_HitsCount) = " + Str( Starting_HitsCount) + Chr(10) + Chr(13) + 
;                        "Ending_HitsCount = " + Str(Ending_HitsCount) ) 
  FindStrings()
  MessageRequester("" , "Finished With This Line !" ) 
  Goto EofExitCheckThisLine
NoHitsExitThisLine: 
;  Starting_HitsCount = Occurrences(HtmlLineIn$ , StartingHtmlElement$ , 0) ; Case-sense off.
;  Ending_HitsCount = Occurrences(HtmlLineIn$ , EndingHtmlElement$ , 0)     ; Case-sense off.
EofExitCheckThisLine:  
;  
EndProcedure ; CheckThisLine()  
;
Procedure FindStrings() 
;  MessageRequester("" , "FindStrings()" )  ;    MessageRequester("  " , "  " )
  NextStartElmPOS = 1
  
  For k = 0 To Starting_HitsCount - 1
    FirstElemStartPOS = FindString(HtmlLineIn$ , StartingHtmlElement$ , NextStartElmPOS)
;MessageRequester("" , "NextStartElmPOS = " + Str(NextStartElmPOS) )    
    FirstElemEndPOS = FirstElemStartPOS + LEN_StartingHtmlElement
;
;MessageRequester("" , "FirstElemStartPOS = " + Str(FirstElemStartPOS)  + Chr(10) + Chr(13) + 
;                      "FirstElemEndPOS = " + Str(FirstElemEndPOS)   + Chr(10) + Chr(13) + 
;                      "LEN_StartingHtmlElement = " + Str(LEN_StartingHtmlElement) ) 
;
    LastElemStartPOS = FindString(HtmlLineIn$ , EndingHtmlElement$ , FirstElemEndPOS )
    LastElmEndPOS = LastElemStartPOS + LEN_EndingHtmlElement 
;
;MessageRequester("" , "LastElemStartPOS = " + Str(LastElemStartPOS)  + Chr(10) + Chr(13) + 
;                      "LastElemEndPOS = " + Str(LastElmEndPOS)   + Chr(10) + Chr(13) +
;                      "LEN_EndingHtmlElement = " + Str(LEN_EndingHtmlElement)  ) 

;
    ElmLength = LastElmEndPOS - FirstElemStartPOS 

    OutputLine$ = Mid(HtmlLineIn$, FirstElemStartPOS , ElmLength )
    
;    MessageRequester("Elm POSitions" , "HtmlLineIn$ = "   + Chr(10) + Chr(13) +  HtmlLineIn$  + Chr(10) + Chr(13) + 
;                                   "OutputLine$ = "  + Chr(10) + Chr(13) + 
;                                   OutputLine$ ) 

    AddGadgetItem(EditorArea ,-1 , OutputLine$)  
    
    NextStartElmPOS = LastElmEndPOS
  Next 
ExitFindStrings: 
EndProcedure ; FindStrings ()
;
Procedure SaveAsHtml()
    MessageRequester("" , "SaveAsHtmlBtn")
  StandardFile$ = "Extracted-File.html"   ; set initial file+path to display
  Pattern$ = "Html (*.html)|*.html;*.txt|Text (*.txt)|*.txt|All files (*.*)|*.*"
  Pattern = 0    ; use the first of the three possible patterns as standard
  OutputFileName$ = SaveFileRequester("Please choose file to save", StandardFile$, Pattern$, Pattern)
  If OutputFileName$
    MessageRequester("Information", "You have selected following file:"+Chr(10) + OutputFileName$ , 0 ) 
  Else
    MessageRequester("Information", "The requester was canceled.", 0) 
  EndIf
  If OutputFileName$ = ""
    MessageRequester("OutputFileName$ = " , "Can't SAVE FILE Until You Enter A FileName .")
    Goto SaveAsHtmlExit
  EndIf   
  EditorAreaItemsCOUNT = CountGadgetItems(EditorArea) + 1
    MessageRequester("EditorArea = " , "EditorAreaItemsCOUNT = " + Str(EditorAreaItemsCOUNT) )
  If EditorAreaItemsCOUNT < 1
    MessageRequester("EditorArea = " , "Nothing To SAVE In EditorArea ?")
    Goto SaveAsHtmlExit    
  EndIf 
  EditorAreaItemsCOUNT2 = 0
  
    EditorAreaItemsCOUNT = CountGadgetItems(EditorArea)
    If CreateFile(1, OutputFileName$) ; If file can be created... 
      For k = 0 To EditorAreaItemsCOUNT - 1
        WriteStringN(1, GetGadgetItemText(EditorArea, k ) ) 
        Next
    CloseFile(1) 
  Else   
    MessageRequester("OpenFile(1,  ", "Can't Open File Listings.txt")    
  EndIf 
SaveAsHtmlExit:  
EndProcedure  ; SaveAsHtmlBtn()  
;
ClearGadgetItems(EditorArea)
OpenWindow_0()
;
Repeat
  Select WaitWindowEvent() 
    Case #PB_Event_Gadget 
      Select EventGadget() 
        Case ExtractBtn  
          OpenInputFile()
        Case ExitBtn  
          PostEvent(#PB_Event_CloseWindow)
        Case SaveAsHtmlBtn  
          SaveAsHtml()  
        Case HelpBtn  
          MessageRequester("" , "HelpBtn")
      EndSelect 
    Case #PB_Event_CloseWindow : End 
  EndSelect 
Until event = #PB_Event_CloseWindow 
Any suggestions ?

Thanks
vmars.us Win11 x64 , Martin Guitar 000-16 (1995)
"All things in moderation , except for love and forgiveness."
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8434
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Re: Compiling Prob with OpenFileRequester & SaveFileRequeste

Post by netmaestro »

I modified the PB Doc example to look in the current directory first:

Code: Select all

StandardFile$ = GetCurrentDirectory()   ; set initial file+path to display
  ; With next string we will set the search patterns ("|" as separator) for file displaying:
  ;  1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
  ;  2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
  ;  3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
  Pattern$ = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|All files (*.*)|*.*"
  Pattern = 2    ; use the first of the three possible patterns as standard
  File$ = OpenFileRequester("Please choose file to load", StandardFile$, Pattern$, Pattern)
  If File$
    MessageRequester("Information", "You have selected following file:" + Chr(10) + File$, 0)
  Else
    MessageRequester("Information", "The requester was canceled.", 0) 
  EndIf
It works OK here on Win10.
BERESHEIT
vmars316
Enthusiast
Enthusiast
Posts: 474
Joined: Fri Jun 29, 2012 12:24 am
Contact:

Re: Compiling Prob with OpenFileRequester & SaveFileRequeste

Post by vmars316 »

Ah.. Perfect .
Thanks netmaestro
vmars.us Win11 x64 , Martin Guitar 000-16 (1995)
"All things in moderation , except for love and forgiveness."
Post Reply