Вниз
Скачать: CL | DM;

Выдернуть из переменной TStringList нужну строку   Найти похожие ветки 

← →
tonick2001 ©   (2010-02-21 10:56) [0]

Есть переменная типа TStringList которая содержит вот такую инфу:
instance of Win32_Processor
{
AddressWidth = 64;
Architecture = 9;
Availability = 3;
Caption = "Intel64 Family 15 Model 6 Stepping 2";
CpuStatus = 1;
CreationClassName = "Win32_Processor";
CurrentClockSpeed = 3010;
CurrentVoltage = 13;
DataWidth = 64;
Description = "Intel64 Family 15 Model 6 Stepping 2";
DeviceID = "CPU0";
ExtClock = 200;
Family = 178;
L2CacheSize = 4096;
L2CacheSpeed = 3010;
L3CacheSize = 0;
L3CacheSpeed = 0;
Level = 15;
LoadPercentage = 99;
Manufacturer = "GenuineIntel";
MaxClockSpeed = 3010;
Name = "Intel(R) Pentium(R) D CPU 3.00GHz";
NumberOfCores = 2;
NumberOfLogicalProcessors = 2;
PowerManagementSupported = FALSE;
ProcessorId = "BFEBFBFF00000F62";
ProcessorType = 3;
Revision = 1538;
Role = "CPU";
SocketDesignation = "Socket 775";
Status = "OK";
StatusInfo = 3;
Stepping = "2";
SystemCreationClassName = "Win32_ComputerSystem";
SystemName = "COMP01";
UpgradeMethod = 1;
Version = "Model 6, Stepping 2";
};

Необходимо выдернуть строку с полем name.

Функция натыкается на первую попавшую строку которая содержит name то есть CreationClassName, как сделать так что бы она смотрела только на начало строки, т.е на ту строку которая начинается с Name и до этого ничего нет.


function _ExtractValue(Data:string):string;
 var
   str:string;
   index, i:integer;
   TS:TStrings;
 begin
   Result := "";
   TS := TStringList.Create();
   try
     TS.Text := StrInfo;

      for i := 0 to (TS.Count - 1) do begin
        Str := Trim(TS[i]);
       index := AnsiPos(Data + " = ", Str);
       if (index <> 0) then begin

         Str := Copy(Str, index + Length(Data + " = "), Length(Str));
         Str := Trim(Str);


         if Str[1]= """ then begin
           Str := Copy(Str, 2, Length(Str));
         end;

         Str := AnsiReplaceText(Str, "";", "");


         if (Length(Str) > 1) then begin

           if Str[Length(Str)]= ";" then begin
             Str := Copy(Str, 1, Length(Str) - 1);
           end;
         end;

         Result := Str;
         Break;
       end;
     end;


← →
Вася   (2010-02-21 11:15) [1]

Попробуй так
Result := StringList.Values["Name "]


← →
Юрий Зотов ©   (2010-02-21 11:20) [2]

Способ 1 - см. свойство Values.
Способ 2 - if Pos("Name", Str) = 1 then


← →
Tonick2001 ©   (2010-02-21 14:39) [3]

Спасибо, сделал.

Function Get_Lines (strng:string):string;
 var i,j:integer;
     str:string;
     counts:integer;
     StartCh:integer;
     List:TStringList;
 begin
 List := TStringList.Create;
 List.Text:=strng;
  For i:=0 to (List.Count-1) do
   Begin
    str:=Trim(List[i]);
    if Pos("Name",str)=1 then
     begin
      For j:=1 to Length(str) do
       begin
        counts:=j;
        if str[j]="=" then
         begin
          Delete(str,1,counts);
          str:=Trim(str);
          break;
         end;
       end;
    For j:=1 to length(str) do
     begin
      startCH:=j;
      if (str[j]=""") then
       begin
        Delete(str,StartCh,1);
        str:=Trim(str);
       end;
     end;
    For j:=1 to length(str) do
     begin
      startCH:=j;
      if (str[j]=";") then
       begin
        Delete(str,StartCh,1);
        str:=Trim(str);
        Break;
       end;
     end;
     Result:=str;
     Break;
   end;
 end;
 end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.044 c
15-1265553404
TUser
2010-02-07 17:36
2010.08.27
Наблюдения над гуглом


2-1265912850
Делфиец
2010-02-11 21:27
2010.08.27
Сортировка в TADOQuery


2-1268800942
zergost
2010-03-17 07:42
2010.08.27
как запихать в DBGrid данные


15-1270622504
bss
2010-04-07 10:41
2010.08.27
Глюки Miranda...


2-1272264722
timekiller
2010-04-26 10:52
2010.08.27
TMemoryStream vs Microsoft Word




   Наверх