Announcement

Collapse
No announcement yet.

Lettura riga da un file

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Lettura riga da un file

    Ciao a tutti

    Tramite EA scrivo su file delle informazioni che si estendono su più righe. Ogni stringa che contiene una riga del file inizia con 5 numeri. La mia intenzione è quella di ricercare nelle varie righe del file ad esempio quella che inizia con il numero 12345

    Per fare questo ho preso visione della funzione FileReadString, ma non ottengo il risultato da me voluto.

    Simulazione righe:

    12548 EURUSD 2015-12-30
    12448 EURUSD 2015-12-30
    12848 EURUSD 2015-12-30
    12348 EURUSD 2015-12-30

    io cerco la riga 12848

    Scrivendo

    Code:
    if(FileReadString(nome_file,4)=="1284")
    non ho riscontri

    Scrivendo

    Code:
    Print(FileReadString(nome_file,4));
    Non esce fuori la riga per come si trova scritta nel file

    Fileopen è si tipo TXT (idem ANSI UNICODE)

    Mi servirebbe qualcosa che legge la prima riga del file, la confronta ed eventualmente passa vanti e legge la seconda riga... e così via fino alla fine del file. In altri linguaggi questo è facilmente realizzabile in pochissime righe. Qui non trovo il modo

    Sapete aiutarmi? Grazie

    #2
    Il file da cui vuoi leggere dove si trova?

    Comment


      #3
      in MQL4/Files

      Comment


        #4
        Allora c'è qualche errore nel codice.. verifica se apri correttamente il file e poi cosa ti da
        Print(FileReadString(nome_file,4));

        Comment


          #5
          Nel file scrive :

          Riga 1= Bianca (vuota....va bene)
          Riga 2=
          +------------------------------------------------------------------------------+
          Riga 3= 14587 | 2015.09.11 08:44 | 0.1 | EURUSD | 68.08

          (Riga 1 2 e 3 le ho scritte io qui ma non ci sono nel file obv)

          Print(FileReadString(nome_file,4));

          Restituisce:

          Riga vuota!
          Legge solo la prima riga e si ferma

          Comment


            #6
            La funzione FileReadString() legge la stringa da dove è posizionato il puntatore (come scritto nella guida).
            Quando apri un file, il puntatore è all'inizio.
            Se tu esegui la funzione, ovviamente lui ti leggerà la prima riga e basta.

            Nella pagina della guida che ho linkato sopra c'è un esempio di un ciclo while che legge un file che credo ti possa essere utile.:05.wink_80_anim_gif
            Skype: cadddami

            Comment


              #7
              Non mi è molto chiaro. Dovresti scrivere il codice e il contenuto del file così come sono.. a meno che Cadddami ti abbia già trovato l'inghippo!

              Comment


                #8
                Code:
                void OnDeinit(const int reason)
                  {
                //---
                   FileClose(File);
                  }
                //+------------------------------------------------------------------+
                //| Expert tick function                                             |
                //+------------------------------------------------------------------+
                void OnTick()
                  {
                
                
                double totale=0;
                string ticket="458759";
                int str_size=0;
                string str;
                  
                if (Volume[1]>1000 && High[1]-Low[1]>0.00400){
                VerificaFile(458759, TimeToStr(TimeLocal(), TIME_DATE),TimeToStr(TimeLocal(), TIME_DATE|TIME_MINUTES),1.5,OrderSymbol(),"Ciao ciao",Bid);
                
                
                    while(!FileIsEnding(File))
                        {
                        
                  
                         str=FileReadString(File,4);
                        
                         PrintFormat(str);
                  }
                }
                //+------------------------------------------------------------------+
                //+------------------------------------------------------------------+
                //| CreaFile()                                                       |
                //+------------------------------------------------------------------+  
                void CreaFile(string date){
                  
                   string nome="prova"+date+".txt";
                   string nl = "\r\n";
                   string h1=nl+
                          "+------------------------------------------------------------------------------+"+nl+
                          "+                     Informazioni                                                         +"+nl+
                          "+------------------------------------------------------------------------------+";
                          
                
                
                File=FileOpen(nome,FILE_TXT|FILE_SHARE_READ|FILE_WRITE,';');
                   if(File < 0)  
                      Print("Errore ",GetLastError()," - File non creato!!!");  
                    else
                      FileWriteString(File,h1);
                
                }
                //+------------------------------------------------------------------+
                //| VerificaFile()                                                   |
                //+------------------------------------------------------------------+
                void VerificaFile(int Ticket, string data,string data1, double Lottx, string cross, string comment,double RSI){
                string Riga="";
                string nome="prova"+data+".txt";
                   if (FileIsExist(nome)){
                      Riga=StringConcatenate(Ticket , " | " + data1 + " | " , Lottx , " | " + cross + " | " + comment + " | " , RSI , " +\r\n");
                      FileWriteString(File,Riga);
                      Print(FileReadString(File,2));
                      }
                else {
                      if (File!=-1)FileClose(File);
                      CreaFile(data);
                      Riga=StringConcatenate(Ticket , " | " + data1 + " | " , Lottx , " | " + cross + " | " + comment + " | " , RSI , " +\r\n");
                      FileWriteString(File,Riga);
                      Print(FileReadString(File,2));
                      }
                      
                }
                
                
                
                }
                niente da fare

                Comment


                  #9
                  Mi sa che il tuo problema non è nella lettura, ma nella scrittura.
                  Il codice qui sopra non sembra buono.:23.itwasntme_80_ani

                  Tu scrivi i dati sul file, ma non li salvi.
                  In questo modo il file rime sempre vuoto e logicamente quando vai a leggere non ci sarà nulla.

                  Ci sono solo 2 modi per salvare i dati di un file: FileClose() o FileFlush().
                  Quindi una volta scritti dei dati sul file, o chiudi e riapri il file (operazione che sconsiglio) o utilizzi la più pratica FileFlush().

                  Tu hai provato a vedere se l'EA ti scrive i dati sul file?
                  Dal codice qui sopra sono abbastanza sicuro che non li scriva quando questo è in esecuzione.
                  Te li salverà solo quando staccherai l'EA, perché la FileClose() la richiami nella OnDeinit().
                  Ma a te interessa che te li salvi quando è in esecuzione, o sbaglio?

                  Nel link che ho messo sopra alla funzione FileFlush() c'è un esempio di codice che potrà aiutarti.:05.wink_80_anim_gif
                  Skype: cadddami

                  Comment


                    #10
                    Ciao, grazie per la risposta.
                    Si facendo un test scriveva bene il risultato, ma in demo no.... cmq ho aggiunto FileFlush(File); subito dopo il FileWriteString vediamo se va.....

                    Comment


                      #11
                      Code:
                       //+------------------------------------------------------------------+
                      //| VerificaFile()                                                   |
                      //+------------------------------------------------------------------+
                      void VerificaFile(int Ticket, string data,string data1, double Lottx, string cross, string comment,double RSI)
                      {
                      string Riga=""; string nome="prova"+data+".txt";    
                      if (FileIsExist(nome))
                      {       Riga=StringConcatenate(Ticket , " | " + data1 + " | " , Lottx , " | " + cross + " | " + comment + " | " , RSI , " +\r\n");      
                      FileWriteString(File,Riga);      
                      FileFlush(File);      
                      } else {      
                      if (File!=-1)FileClose(File);      
                      CreaFile(data);      
                      Riga=StringConcatenate(Ticket , " | " + data1 + " | " , Lottx , " | " + cross + " | " + comment + " | " , RSI , " +\r\n");      
                      FileWriteString(File,Riga);      
                      FileFlush(File);      
                      }        
                      }


                      Scrive la prima riga quando il file non esiste e quindi lo crea. Poi quando deve aggiungere un'altra riga non lo fa più e il file rimane solo con la prima occorrenza

                      Comment


                        #12
                        Code:
                           
                        void OnTick()
                          {
                        
                        if (Volume[1]>1000 && High[1]-Low[1]>0.00400)
                                 VerificaFile(458759, TimeToStr(TimeLocal(), TIME_DATE),TimeToStr(TimeLocal(), TIME_DATE|TIME_MINUTES),1.5,Vaffancuore,"Ciao ciao",Bid);
                           
                                   
                                 if(FileSeek(File,FileSize(File),SEEK_SET)==true)
                        
                        
                        PrintFormat("Testo stringa con numero 1: ",FileReadString(File));
                        else Print(GetLastError());
                        
                              
                        
                            
                          }
                        ottengo errore 5008 ..... File sbagliato? Comè possibile?

                        Comment


                          #13
                          Code:
                          +------------------------------------------------------------------------------+
                          +                     Informazioni                                                                     +
                          +-------------------------------------------------------------------------------------+
                          +  Ticket  |     Apertura     | Lot | Cross  |    Commento       |     RSI     +
                          +-------------------------------------------------------------------------------------+
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + LEGGIMI | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          + 458759 | 2015.12.14 18:00 | 1.5 |  | Ciao ciao | 1.1       +
                          Allora. Io ho questo file generato. Voglio leggere la riga dove c'e scritto LEGGIMI. Sto impazzendo a capire come fare

                          Comment


                            #14
                            Code:
                            File=FileOpen(nome,FILE_TXT|FILE_SHARE_READ|FILE_WRITE,';');
                            In questa istruzione vai ad aprire un file di testo con separatore punto e virgola. Il tuo file (sotto) è si un file di testo ma come separatore usi la barra verticale, questo è già un problema.
                            Code:
                            +------------------------------------------------------------------------------+
                            + Informazioni +
                            +-------------------------------------------------------------------------------------+
                            + Ticket | Apertura | Lot | Cross | Commento | RSI +
                            +-------------------------------------------------------------------------------------+
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + LEGGIMI | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +
                            + 458759 | 2015.12.14 18:00 | 1.5 | | Ciao ciao | 1.1 +

                            Secondo il mio parere la prima cosa da fare, per leggere facilmente un file, è creare un file csv con solo i dati, questo rende facile leggere i vari campi.
                            Togliere quindi le intestazioni, e tutti i + a inizio e fine riga.
                            Impostato nel seguente modo potrai leggere i dati usando FileReadNumber per i valori numerici, FileReadDatetime per le date e FileReadString per i testi.

                            Code:
                            458759;2015.12.14 18:00;1.5;;Ciao ciao;1.1
                            458759;2015.12.14 18:00;1.5;;Ciao ciao;1.1
                            458759;2015.12.14 18:00;1.5;;Ciao ciao;1.1

                            Comment


                              #15
                              Code:
                               
                               if(FileReadString(nome_file,4)=="1284")
                              Dalla guida MQL per quanto riguarda FileReadString:
                              When reading from a txt-file the string length is not required, and the string will be read from the current position to the line feed character "\r\n".
                              L'istruzione scritta sopra non è coerente, ti verrà restituita comunque tutta la riga.


                              Comment

                              Working...
                              X