Lecture d'un fichier texte sur serveur (RESOLU)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Lecture d'un fichier texte sur serveur

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lecture d'un fichier texte sur serveur

Message 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:
Dernière modification par Backup le jeu. 22/août/2013 13:07, modifié 1 fois.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Lecture d'un fichier texte sur serveur

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lecture d'un fichier texte sur serveur

Message 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 !
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Lecture d'un fichier texte sur serveur

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecture d'un fichier texte sur serveur

Message 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 :?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Lecture d'un fichier texte sur serveur

Message 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 ?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecture d'un fichier texte sur serveur

Message 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
Dernière modification par Ar-S le jeu. 22/août/2013 18:14, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Lecture d'un fichier texte sur serveur

Message par MetalOS »

Tu aurai un exemple ? (Histoire de me faciliter la vie lol)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Lecture d'un fichier texte sur serveur

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecture d'un fichier texte sur serveur

Message 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() )

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Lecture d'un fichier texte sur serveur

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecture d'un fichier texte sur serveur

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Lecture d'un fichier texte sur serveur

Message 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 ;-)
Répondre