Page 2 sur 2

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 11:13
par falsam
Longue comme le bras c'est vrai :mrgreen: . MetalOS est sous un environnement Mac OS et ne souhaite pas télécharger le fichier distant. Juste le lire en mémoire.

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 12:47
par Backup
ben la methode Get "telecharge" non ?

de plus il me semble que Get est limité en taille car ça passe par l'URL non ?

meme en mode Http , il me semble qu'il y a une limitation concernant la taille des données récupérés ....

certains parlent de 4 ko reel maximum ... d'autres parlent de 255 en passant par l'url ...

Microsoft eux parlent de
Si vous utilisez la méthode GET, vous êtes limité à 2 048 caractères moins le nombre de caractères figurant dans le chemin d'accès réel.
http://support.microsoft.com/kb/208427/fr

ça doit dépendre du navigateur .....
ceci explique ton
Parfois le résultat est nul. A mon avis tu dois prévoir dans ce cas à une nouvelle lecture.

quoiqu'il en soit le telechargement a bien lieu , qu'il se fasse dans le Cache du Navigateur , ou en direct dans un dossier precis
perso , je prefere savoir ou ça va ....
rien n'empeche d'effacer le fichier avec "Resultat = DeleteFile(NomFichier$)" , juste apres usage ....

c'est transparent , et tres rapide .. non limité en taille :) (plus court en code )

[reedit]
ps: si ça se trouve la fonction

Code : Tout sélectionner

ReceiveHTTPFile()
utilise la methode Get .. va savoir :lol:

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 13:06
par GallyHC
Bonjour,

Je penses qu'il y a un truc que tu n'as pas compris Dobro :). En fait il ne veut pas être obliger de devoir copié physiquement les données sur le disque dur (Ce que je comprend car cela laisse une trace). Donc les données sont copiées en mémoire (et d'ailleurs pour un de mes programmes c'est aussi ce que je fait).

Après il ne faut pas confondre le Get (URL) et les datas de réception ;).

Cordialement,
GallyHC

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 13:09
par Backup
GallyHC a écrit :En fait il ne veut pas être obliger de devoir copié physiquement les données sur le disque dur (Ce que je comprend car cela laisse une trace).
que dalle ! si tu erases le fichier juste après l'avoir lu , en même pas quelque millième de seconde , ton fichier téléchargé disparait !
si on ne le sait pas ... c'est transparent
si c'est un problème de sécurité , tu Cryptes ... (comme les contes )
Après il ne faut pas confondre le Get (URL) et les datas de réception ;).

Cordialement,
GallyHC
oui , dans mon message , je parle des 2 modes ! (par url , et Http ) ;)

les 2 sont limités en taille !

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 13:35
par GallyHC
Ouep, mais le problème est que si pour x raison le programme plante ou j'en passe et que le fichier a bien été créer... Il restera et sera accessible donc le faire en mémoire est une bonne solution (avec cryptage en plus).

Ensuite Pour la sécurité, tu peux aussi te créer ton propre "UserAgent" et seul celui-là aura accès au Fichier (le fichier ne sera plus un txt mais un php). Tu ajoute ce script au départ de ton fichier (*.php).

Code : Tout sélectionner

<?php
if ($_SERVER['HTTP_USER_AGENT'] != 'TonUserAgent')
{
	echo "forbidden";
	exit();
}
?>
Ce n'est pas une solution miracle, mais cela augmente un peu la protection :)

Cordialement,
GallyHC

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 14:39
par Ar-S
GallyHC a écrit :Ouep, mais le problème est que si pour x raison le programme plante ou j'en passe et que le fichier a bien été créer... Il restera et sera accessible donc le faire en mémoire est une bonne solution (avec cryptage en plus).

Ensuite Pour la sécurité, tu peux aussi te créer ton propre "UserAgent" et seul celui-là aura accès au Fichier (le fichier ne sera plus un txt mais un php). Tu ajoute ce script au départ de ton fichier (*.php).

Code : Tout sélectionner

<?php
if ($_SERVER['HTTP_USER_AGENT'] != 'TonUserAgent')
{
	echo "forbidden";
	exit();
}
?>
Ce n'est pas une solution miracle, mais cela augmente un peu la protection :)

Cordialement,
GallyHC
C'est pas con et amusant comme méthode.

@Dobro
Tout dépend encore et toujours de l'usage qu'on peut avoir du programme. S'il est destiné à être fonctionnel sur des PC "clients" bridés en écriture, il y aura un hic... Dans tout autre cas, la méthode télécharger/"crypter"/effacer s'avère la plus simple.

J'avais eu ce soucis avec mon lecteur d'images d'archives généalogiques pour mairie ou toutes les images inscrites dans le dvd devaient être cryptées et à aucun moment le soft ne pouvait écrire sur la machine hôte. comme quoi ça arrive.
il me semblait avoir eu un code pour lire directement le contenu d'une adresse web mais je ne le trouve pas... :?

---EDIT---

Hélas le code contient des API donc... no MAC :?

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 16:55
par MetalOS
Désolé de la réponse tardive je travail beaucoup de nuit en ce moment. Je ne veut pas télécharger le fichier car ce sont des données qui ne peuvent pas être partagé en brut.

Voici les procédures que j'utilise pour une autre source de données ou je télécharge le fichier et je le traite en local.

Code : Tout sélectionner

;Procédure de hachage des données
Procedure.s SepareDonnees(phrase$ ,type)
 Protected a$,b$
  If type=1
   a$=StringField(phrase$,6," ")
ProcedureReturn a$
  EndIf
  If type=2
   a$=StringField(phrase$,10," ")
ProcedureReturn a$
  EndIf
EndProcedure

;Chargement du fichier de données meteorologic.net
Procedure ChargementCoordonnees()
 If ReceiveHTTPFile("http://www.meteorologic.net/data/radar/brute_donnee.txt", "brute_donnee.txt")
 Else
      MessageRequester("Information.", "Chargement des données météorologic.net impossible", #PB_MessageRequester_Ok )
 EndIf
 
 If ReadFile(1,"brute_donnee.txt")
  Ligne1.s = ReadString(1)
 While Not Eof(1)
   Ligne.s = ReadString(1)
    
    DonLat.s = SepareDonnees(Ligne.s,1)
     DonLat1.d = ValD(DonLat.s)
    DonLong.s = SepareDonnees(Ligne.s,2)
     DonLong1.d = ValD(DonLong.s)
      
  StartDrawing(CanvasOutput(#CanvasGadgetCarteCellules))
    ProjectionCellules(DonLat1.d, DonLong1.d) 
  StopDrawing()   
 Wend
   CloseFile(1)
 EndIf
EndProcedure

Pour les données de mon premier post j'arrive à charger le fichier dans un WebGadget et ensuite l'envoyer dans un EditorGadget avec cet procédure

Code : Tout sélectionner

Procedure Donnees()
  Resultat$ = GetGadgetItemText(#WebGadgetCellules, #PB_Web_HtmlCode)
  
  SetGadgetText(#EditorCellules, Resultat$)
EndProcedure  
Et il possible ensuite de traiter ligne par ligne le contenue de l'EditorGadget ?

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 17:28
par Ar-S
MetalOS a écrit :

Code : Tout sélectionner

Procedure Donnees()
  Resultat$ = GetGadgetItemText(#WebGadgetCellules, #PB_Web_HtmlCode)
  
  SetGadgetText(#EditorCellules, Resultat$)
EndProcedure  
Et il possible ensuite de traiter ligne par ligne le contenue de l'EditorGadget ?
Pourquoi ne pas utiliser un ListViewGadget() ?
Pour ta gestion des données, tu devrais utiliser un tableau à 2 dimensions (pour ranger tes longitudes / latitudes)
Le travail sur ces données en serait simplifiées

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 17:54
par MetalOS
Tu aurai un exemple ? (Histoire de me faciliter la vie lol)

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 21:56
par falsam
Bonjour MetalOs. J'ai l'impression que tu as zappé ma proposition de lecture d'un fichier se trouvant sur un serveur distant sans le télécharger.

Toutefois je vais répondre à une de tes questions.
MetalOS a écrit :Et il possible ensuite de traiter ligne par ligne le contenue de l'EditorGadget ?

Code : Tout sélectionner

Enumeration
  #Mainform
  #Editor
EndEnumeration

Define.l Event, GEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Procedure Open_MainForm()
  Protected Result.s
  OpenWindow(#Mainform, 0, 0, 500, 400, "New Form", WindowStyle)
  EditorGadget(#Editor, 10, 10, 480, 370)
  
  ;On va un peu remplir l'editor
  For i=0 To 20
    AddGadgetItem(#Editor, -1, "Ligne "+Str(i))
  Next
  
  ;Lecture de EditorGadget LIGNE PAR LIGNE
  For i = 0 To CountGadgetItems(#Editor)
    Debug GetGadgetItemText(#Editor, i)
  Next
  
  
EndProcedure

Open_MainForm()

Repeat
  Event  = WaitWindowEvent(10)
  GEvent = EventGadget()
  Select Event
    Case #PB_Event_Gadget
      Select GEvent
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

Re: Lecture d'un fichier texte sur serveur

Publié : jeu. 22/août/2013 22:12
par Ar-S
Je trouve tout de même qu'un listViewGadget() serait plus adaequat mais bon ;)
Pour l'extraction de tes données, j'ai opté pour une expression régulière.
Je trouve ça plus clean et plus sûr.

Code : Tout sélectionner

; Extraire Longitude et latitude via expression régulière by Ar-S
; Extraire Longitude et latitude via expression régulière by Ar-S
InitNetwork()

#LA = 0
#LO = 1

Global.s T 

Procedure ExtractionCoord(Contenu.s)
Dim result$(0) 
CreateRegularExpression(0,"[-]?+[0-9]{1,3}+[.]+[0-9]{1,10}")
NbFound = ExtractRegularExpression(0, T , result$()) 
Debug "Trouvé " + Str(NbFound)

ReDim result$(NbFound) 

Mode = #LA

For k = 0 To NbFound-1

             If Mode = #LO
                  TXT$ = "LONGITUDE : "
                  Mode - 1
             ElseIf Mode = #LA
                  TXT$ = "LATITUDE : "
                  Mode + 1     
             EndIf
             Debug TXT$ + result$(k) ; ICI au lieu du dbug tu n'as plus qu'à afficher TXT$ dans un listviewgadget()
 Next 

FreeRegularExpression(0) 
EndProcedure


Procedure.s ChargementCoordonnees() 
 	If ReceiveHTTPFile("http://www.meteorologic.net/data/radar/brute_donnee.txt", GetCurrentDirectory()+"brute_donnee.txt") 
 	Else 
 	MessageRequester("Information.", "Chargement des données météorologic.net impossible", #PB_MessageRequester_Ok ) 
 	EndIf 
      	  
      T.s = ""
	If ReadFile(1, GetCurrentDirectory()+"brute_donnee.txt") 
      	Ligne1.s = ReadString(1) 
      	
      	While Not Eof(1) 
      	      T.s + ReadString(1) 
      	 
      	Wend 
      	CloseFile(1) 
	      ProcedureReturn T
	EndIf 
EndProcedure 


ExtractionCoord(ChargementCoordonnees() )


Re: Lecture d'un fichier texte sur serveur

Publié : ven. 23/août/2013 6:28
par MetalOS
@falsam
Je devrais pouvoir faire ce que je veut avec ton exemple. Merci.

@Ar-S
Merci pour ton exemple mais comme je voudrais éviter de télécharger le fichier en local sa n'ira pas car j'utilise déjà une méthode similaire que je cherche justement à remplacer.

Merci à tous pour votre aide.

Re: Lecture d'un fichier texte sur serveur

Publié : ven. 23/août/2013 8:48
par Ar-S
MetalOS a écrit :@falsam
Je devrais pouvoir faire ce que je veut avec ton exemple. Merci.

@Ar-S
Merci pour ton exemple mais comme je voudrais éviter de télécharger le fichier en local sa n'ira pas car j'utilise déjà une méthode similaire que je cherche justement à remplacer.

Merci à tous pour votre aide.
La méthode de récupération/lecture de Falsam est couplable avec mon extraction des données.
Bonne continuation.

Re: Lecture d'un fichier texte sur serveur

Publié : ven. 23/août/2013 18:48
par MetalOS
Il se peut que j'utilise quand même une partie de ton code pour autre chose. En tous cas merci pour votre aide ;-)