Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
String değer okuma
#1
merhaba;
dünya tarihi için 
http://worldtimeapi.org/api/ip
adresinden aşağıdaki bilgiyi okuyorum.

{"abbreviation":"+03","client_ip":"5.24.30.18","datetime":"2022-08-13T14:33:01.340405+03:00","day_of_week":6,"day_of_year":225,"dst":false,"dst_from":null,"dst_offset":0,"dst_until":null,"raw_offset":10800,"timezone":"Europe/Istanbul","unixtime":1660390381,"utc_datetime":"2022-08-13T11:33:01.340405+00:00","utc_offset":"+03:00","week_number":32}

amacım bu veri içindeki datetime":"2022-08-13 bilgiden 2022-08-13 bu tarih bilgisini okumak. 

AnsiMidStr(deger, 60 , 10)

bu şekilde okuma işlemini yapıyorum. ancak gelen bilgi günlük değişebiliyor. bu durumda tarih bilgisinin konumu değişiyor ve hatlı bilgi okunmuş oluyor.

günün tarih bilgisini doğru okumak için ne yapabilirim.
Cevapla
#2
(13-08-2022, Saat: 14:48)akuyumcu63 Adlı Kullanıcıdan Alıntı: merhaba;
dünya tarihi için 
http://worldtimeapi.org/api/ip
adresinden aşağıdaki bilgiyi okuyorum.

{"abbreviation":"+03","client_ip":"5.24.30.18","datetime":"2022-08-13T14:33:01.340405+03:00","day_of_week":6,"day_of_year":225,"dst":false,"dst_from":null,"dst_offset":0,"dst_until":null,"raw_offset":10800,"timezone":"Europe/Istanbul","unixtime":1660390381,"utc_datetime":"2022-08-13T11:33:01.340405+00:00","utc_offset":"+03:00","week_number":32}

amacım bu veri içindeki datetime":"2022-08-13 bilgiden 2022-08-13 bu tarih bilgisini okumak. 

AnsiMidStr(deger, 60 , 10)

bu şekilde okuma işlemini yapıyorum. ancak gelen bilgi günlük değişebiliyor. bu durumda tarih bilgisinin konumu değişiyor ve hatlı bilgi okunmuş oluyor.

günün tarih bilgisini doğru okumak için ne yapabilirim.


Function GetJSONParamByName(JSonData, ReqPrm:String):String;
Var
Line, nSearchString:String;
List:TStringList;
I, nPos:Integer;
 
Begin
Result:='?';
if Length(JSonData)<3 then Exit;
JSonData[Low(JSonData)]:=' ';
JSonData[High(JSONData)]:=' ';
JSonData:=Trim(JSonData);
nSearchString:='"'+ReqPrm+'":';
List:=TStringList.Create;
List.Text:=StringReplace(JSonData, ',', chr(13), [rfReplaceAll, rfIgnoreCase]);
for I:=0 To List.Count-1 do
Begin
 Line:=List.Strings[I];
 nPos:=Pos(nSearchString, Line);
 if (nPos>0) then
 Begin
  Result:=Copy(Line, nPos+nSearchString.Length, Length(Line));
  if Result[Low(Result)] = '"' then
   Result[Low(Result)]:=' ';
  if Result[High(Result)] = '"' then
   Result[High(Result)]:=' ';
  Result:=Trim(Result);
  Break;
 End;  
End;
List.Free;
End;



procedure TForm1.FormCreate(Sender: TObject);
Var
Veri:String;

begin
Veri:='{"abbreviation":"+03","client_ip":"5.24.30.18","datetime":"2022-08-13T14:33:01.340405+03:00","day_of_week":6,'+
      '"day_of_year":225,"dst":false,"dst_from":null,"dst_offset":0,"dst_until":null,"raw_offset":10800,"timezone":"Europe/Istanbul",'+
      '"unixtime":1660390381,"utc_datetime":"2022-08-13T11:33:01.340405+00:00","utc_offset":"+03:00","week_number":32}';

showmessage( GetJSONParamByName(Veri, 'datetime') );

halt;
end;
Cevapla
#3
(13-08-2022, Saat: 14:48)akuyumcu63 Adlı Kullanıcıdan Alıntı: merhaba;
dünya tarihi için 
http://worldtimeapi.org/api/ip
adresinden aşağıdaki bilgiyi okuyorum.

{"abbreviation":"+03","client_ip":"5.24.30.18","datetime":"2022-08-13T14:33:01.340405+03:00","day_of_week":6,"day_of_year":225,"dst":false,"dst_from":null,"dst_offset":0,"dst_until":null,"raw_offset":10800,"timezone":"Europe/Istanbul","unixtime":1660390381,"utc_datetime":"2022-08-13T11:33:01.340405+00:00","utc_offset":"+03:00","week_number":32}

amacım bu veri içindeki datetime":"2022-08-13 bilgiden 2022-08-13 bu tarih bilgisini okumak. 

AnsiMidStr(deger, 60 , 10)

bu şekilde okuma işlemini yapıyorum. ancak gelen bilgi günlük değişebiliyor. bu durumda tarih bilgisinin konumu değişiyor ve hatlı bilgi okunmuş oluyor.

günün tarih bilgisini doğru okumak için ne yapabilirim.

Elinizdeki veri JSON olduğu için JSON parse işlemi ile kolayca istediğiniz değeri okuyabilirsiniz. 
Webten okuduğunuz bilgiyi jsonData adında string bir değişkene attığınızı farzedersek:
var
  jsonValue: TJSONValue;
begin
  jsonValue:= TJSONObject.ParseJSONValue(jsonData);
  if jsonValue <> nil then
  begin
    ShowMessage(jsonValue.GetValue<string>('datetime'));
    jsonValue.Free;
  end;
end;
There's no place like 127.0.0.1
WWW
Cevapla
#4
Eğer daha basit bir şey isterseniz,

gelen veriyi gelenveri adında bir değişkene atadığımız farz edersek,

var p: integer;
gelenveri, tarih: string;

p := pos("datetime:", gelenveri);
if p <> 0 then tarih := copy(gelenveri, p+10, 10);

şeklinde de yapabilirsiniz.
Cevapla
#5
merhaba;

değerli bilgiler için çok teşekkür ederim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  E fatura okuma xlm metemet 5 1.271 06-04-2025, Saat: 19:30
Son Yorum: metemet
  string icinde alt satirda goster koduyla beraber nasil gonderilir sadikacar60 4 1.079 09-09-2024, Saat: 08:42
Son Yorum: damert6
  Mikrotik routher Port okuma Mert_37 1 651 23-08-2024, Saat: 16:46
Son Yorum: Syntax
  OPC Server veri okuma enigma 1 1.309 13-09-2023, Saat: 11:50
Son Yorum: shooterman
  ReadProcessMemory ile veri okuma nasıl yapılır eraendless 2 1.213 07-09-2023, Saat: 00:35
Son Yorum: veteran



Konuyu Okuyanlar: 1 Ziyaretçi