begin process at 2010 03 19 13:27:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Fichier & Disque

 > 

Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???

lundi 6 juillet 2009 à 14:31:21 | Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???

Smith4400

salut tous le monde !!!!
j'ai un tout petit problaime avec écrire des valeurs dans un bin
mon code est...
--------------------------------------------------------
var sTemp : string;
var sId : string;
var soft: char;
begin
     sTemp:=edit2.text; 
            soft:=chr(strtoint('$' + copy(sTemp,1,2)));
            c[22]:=soft;
            soft:=chr(strtoint('$' + copy(sTemp,3,2)));
            c[23]:=soft;
           
          Write(F,C);
          CloseFile(F);
          end
end;
------------------------------------------------------
ce code fonctionne normal mais moi je veux écrire tous une chaine une fois pour toute et pas a chaque foix je récrit c[22] et apres c[23] et apres c[24]
je vous t'attends
merci
lundi 6 juillet 2009 à 21:01:33 | Re : Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???

f0xi

Membre Club Administrateur CodeS-SourceS

voila ce qu'il te faut depuis le debut :::




const
  MaxBinLength    = 4096;
  MaxBinStrLength = MaxBinLength shr 1;

type
  p2Bytes = ^T2Bytes;
  T2Bytes = array[0..1] of byte;
  TBin    = array[0..MaxBinLength-1] of byte;


{ StrToBin

  convertis une chaine qui represente une valeur hexa decimale en sa representation
  binaire (tableau de bytes).
  la taille maximale de ce tableau est donnée par la constante MaxBinLength,
  la taille maximale de la chaine entrante est donnée par la constante MaxBinStrLength

  PARAMETRES :
    S   [I] AnsiString, chaine representant une valeur hexadecimale
    Bin [O] TBin (Tableau de bytes), valeur binaire de la chaine

  RETOUR :
    integer, renvois la taille ecrite dans Bin ou code erreur (<= 0)
     0 : S est vide
    -2 : S n'as pas une taille valide (doit etre multiple de 2) : F est mauvais, 0F est ok
    -1 : la taille de S depasse la capacité du buffer (MaxBinLength)
    -3 : S possede des caracteres invalide (n'est pas dans 0123456789ABCDEFabcdef)

}
function StrToBin(const S : AnsiString; var Bin : TBin): integer;
var pW     : p2Bytes;
    N, L   : integer;
    W1, W0 : integer;
begin
  result := 0;

  if S = EmptyStr then
    exit;

  pW := @S[1];

  L := Length(S);
  if (L and $1) = $1 then
  begin
    result := -2;
    exit;
  end;

  result := L shr 1;
  if result > MaxBinLength then
  begin
    result := -1;
    exit;
  end;


  for N := 0 to result-1 do
  begin
    W0 := pW^[0];
    W1 := pW^[1];


    case W0 of
      $30..$39 : dec(W0, $30);
      $41..$46 : dec(W0, $37);
      $61..$66 : dec(W0, $57);
    else
      result := -3;
      exit;
    end;

    case W1 of
      $30..$39 : dec(W1, $30);
      $41..$46 : dec(W1, $37);
      $61..$66 : dec(W1, $57);
    else
      result := -3;
      exit;
    end;

    Bin[N] := byte((W0 shl 4) or W1);

    inc(pW);
  end;
end;

{ BinToStr

  Convertis un ensemble de valeurs binaire (TBin) en une chaine lisible. Sont fonctionnement
  est inverse a celui de StrToBin.

  PARAMETRES :
    Bin          [I] TBin, ensemble de valeurs binaire
    BinSize      [I] Integer, taille de l'ensemble de valeurs
    HexLowerCase [I] boolean, indique si il faut utiliser les caracteres minuscules (true) ou
                     majuscules (false).

  RETOUR :
    AnsiString, chaine contenant la representation textuelle des valeurs binaire contenues dans Bin.
    vide si BinSize <= 0.

}
function BinToStr(const Bin : TBin; const BinSize: integer; const HexLowerCase: boolean = true): AnsiString;
var pW : p2Bytes;
    N : integer;
    BI, BH, BL : byte;
const
  BIVAL : array[boolean] of byte = ($37, $57);
begin
  if BinSize = 0 then
    exit;

  BI := BIVAL[HexLowerCase];

  SetLength(result, BinSize shl 1);
  pW := @result[1];

  for N := 0 to BinSize-1 do
  begin
    BH := Bin[N] shr 4;
    BL := Bin[N] and $F;

    case BH of
      $0..$9 : inc(BH, $30);
      $A..$F : inc(BH, BI);
    end;

    case BL of
      $0..$9 : inc(BL, $30);
      $A..$F : inc(BL, BI);
    end;

    pW^[0] := BH;
    pW^[1] := BL;

    inc(pW);
  end;
end;

{ ReadBinFromStream

  lit les octets d'un flux et les places dans un tableau TBin.

  PARAMETRES :
    Stream  [I] TStream, Instance valide d'une classe TStream
    Bin     [O] TBin, contient les octets luts du flux
    BinSize [I] BinSize, nombres d'octets a lire

  RETOUR :
    integer, renvois le nombre d'octets copiés dans Bin (>= 1)
    0  : BinSize est definit a 0 ou inferieur a 0
    -1 : Stream invalide, pas instancié (create)
}
function ReadBinFromStream(Stream: TStream; var Bin: TBin; const BinSize: integer): integer;
begin
  result := 0;

  if BinSize <= 0 then
    exit;

  if not assigned(Stream) then
  begin
    result := -1;
    exit;
  end;

  result := Stream.Read(Bin[0], BinSize);
end;

{ WriteBinToStream

  Ecrit les octets contenus dans un tableau TBin dans un flux

  PARAMETRES :
    Stream  [I/O] TStream, Instance valide d'une classe TStream
    Bin     [I]   TBin, contient les octets a ecrire dans le flux
    BinSize [I]   BinSize, nombres d'octets a ecrire

  RETOUR :
    integer, renvois le nombre d'octets ecrit dans le flux (>= 1)
    0  : BinSize est definit a 0 ou inferieur a 0
    -1 : Stream invalide, pas instancié (create)
}
function WriteBinToStream(Stream: TStream; const Bin: TBin; const BinSize: integer): integer;
begin
  result := 0;

  if BinSize <= 0 then
    exit;

  if not Assigned(Stream) then
  begin
    result := -1;
    exit;
  end;

  result := Stream.Write(Bin[0], BinSize);
end;




mercredi 8 juillet 2009 à 11:39:59 | Re : Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???

Smith4400

mais comment peux-je utilise ces fonctions la???
jeudi 9 juillet 2009 à 00:50:44 | Re : Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???

f0xi

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !


on se demande pourquoi je me suis cassé la nouille a mettre des commentaires aux fonctions ...




var K : integer;
  B : TBin;
  TFS : TFileStream;
begin
  Edit1.Test := 'FF12EE34DD56CC78BB90AA';

  K := StrToBin(Edit1.Text, B);
  if K > 0 then
  begin
    TFS := TFileStream.Create('c:\test.bin', fmCreate);
    try
      WriteBinToStream(TFS, B, K);
    finally
      TFS.Free;
    end;
  end;
end;


voila ...



samedi 18 juillet 2009 à 23:33:18 | Re : Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???

Smith4400

f0xi
merci c très utiles + ça marche très bien
mais comment peux-je ouvrir le fichier sans l'écraser ??
car je veux juste écrire la table et pas faire un nouveau fichier et écrire dans...
merci infiniment



Smith



dimanche 19 juillet 2009 à 05:09:05 | Re : Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???

f0xi

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !




en utilisant Seek ou position du stream pour te caler a l'offset de depart de la donnée a ecrire.

Stream.Seek(StartOffset, soFromEnd);
WriteBinToStream(....);


lundi 20 juillet 2009 à 09:18:27 | Re : Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???

Smith4400

f0xi
merci j'ai trouvé la répence correct

merci merci merci
---------------------------------
une autre chose
je veux chercher l'offset de des donnée que j'ai écris,j'ai trouvé une fonction
----------------------------------
ScanFile searches for a string in a file and returns the position of the string
in the file or -1, if not found.

ScanFile sucht in einer Datei nach dem Vorkommen
eines bestimmten Strings und gibt bei Erfolg die Position zurück, wo der String
gefunden wurde.
}

function ScanFile(const FileName: string;
const forString: string;
caseSensitive: Boolean): Longint;
const
BufferSize = $8001; { 32K+1 bytes }
var
pBuf, pEnd, pScan, pPos: PChar;
filesize: LongInt;
bytesRemaining: LongInt;
bytesToRead: Integer;
F: file;
SearchFor: PChar;
oldMode: Word;
begin
{ assume failure }
Result := -1;
if (Length(forString) = 0) or (Length(FileName) = 0) then Exit;
SearchFor := nil;
pBuf := nil;
{ open file as binary, 1 byte recordsize }
AssignFile(F, FileName);
oldMode := FileMode;
FileMode := 0; { read-only access }
Reset(F, 1);
FileMode := oldMode;
try { allocate memory for buffer and pchar search string }
SearchFor := StrAlloc(Length(forString) + 1);
StrPCopy(SearchFor, forString);
if not caseSensitive then { convert to upper case }
AnsiUpper(SearchFor);
GetMem(pBuf, BufferSize);
filesize := System.Filesize(F);
bytesRemaining := filesize;
pPos := nil;
while bytesRemaining > 0 do
begin
{ calc how many bytes to read this round }
if bytesRemaining >= BufferSize then
bytesToRead := Pred(BufferSize)
else
bytesToRead := bytesRemaining;
{ read a buffer full and zero-terminate the buffer }
BlockRead(F, pBuf^, bytesToRead, bytesToRead);
pEnd := @pBuf[bytesToRead];
pEnd^ := #0;
pScan := pBuf;
while pScan < pEnd do
begin
if not caseSensitive then { convert to upper case }
AnsiUpper(pScan);
pPos := StrPos(pScan, SearchFor); { search for substring }
if pPos <> nil then
begin { Found it! }
Result := FileSize - bytesRemaining +
Longint(pPos) - Longint(pBuf);
Break;
end;
pScan := StrEnd(pScan);
Inc(pScan);
end;
if pPos <> nil then Break;
bytesRemaining := bytesRemaining - bytesToRead;
if bytesRemaining > 0 then
begin
Seek(F, FilePos(F) - Length(forString));
bytesRemaining := bytesRemaining + Length(forString);
end;
end; { While }
finally
CloseFile(F);
if SearchFor <> nil then StrDispose(SearchFor);
if pBuf <> nil then FreeMem(pBuf, BufferSize);
end;
------------------------
mais elle cherche le type "string" et les données que je cherche sont "integer"

merci

vendredi 24 juillet 2009 à 12:14:13 | Re : Est ce que je peux ércire une suite de characteres directement ou il faut ecrire un par un ???

Smith4400

merci, j'ai trouvé la sollution



Cette discussion est classée dans : var, soft, suite, stemp, ércire


Répondre à ce message

Sujets en rapport avec ce message

Sebo-Chat : soft de discussion [ par sebrs1 ] Salut,J'ai fait un programme de discussion et je veux savoir ce que vous en pensez.Si vous avez des idées d'amelioration dites le moi.Vous le trouvere Récup de Prog Clipper [ par mjmep ] Un ami a une petit boite. il gère ses comptes avec un prog datant de mathusalem écrit en clipper 5.2. avant de décompiler l'exe (cela coûte plus de 60 Resourse machine [ par commodore ] J'ai fait un petit soft pour telecharger des fichiers avec le FPiettedés que je lance l'application j'ai l'utilisation du processeur de ma machine a 1 Visio-conférence [ par jockos ] Je dois développer un soft de Visio-conférence qui crypte les échanges (3-DES, Cast ou RSA)...Donc un Soft sécurisé de Visio-conférence...Est-il possi tserversocket de me..... [ par intello2001 ] bon jarive toujours aps a reconaitre l'ID d'une multiconection :var Form1: TForm1;con: integer;implementation{$R *.dfm}procedure TForm1.ServerSocket1 Netmeeting SDK (pour les spécialistes) [ par jockos ] Est-ce que quelqu'un sait si on peux modifier le flux générer par netmeeting (quand il capture la vidéo et le son a a partir d'une webcam par exemple) verifier une var en boucle [ par PowerII ] slt,j'voudrais savoir cmt j'peux faire une boucle ki verifie sans arret une variable mais ki laisse l'appli réagir@++ PowerII;-) Intercepter touche entrée suite saisie [ par nonobiker ] Bonjour,Je souhaite savoir comment intercepter un clic sur la touche entrée suite à une saisie dans une zone Edit. L'objectif est de ne pas avoir à al WebBrowser - OnNewWindows2 [ par MAsterC ] Voici une source tiré du sujet : Réseau et Internetprocedure TWeb.WebBrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool);va Création d'applications skinnées avec FreeMedia (aka MediaPack) [ par maxabbey ] Salut à tous,Sur SourceForge.net, il y a une suite de composants Delphi, FreeMedia (http://sourceforge.net/projects/ksfreemedia), gratuite et avec sou


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales