Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ] > Код на шару!
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.07.2013, 23:36
SkiHunter SkiHunter вне форума
Прохожий
 
Регистрация: 29.07.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Считывание данных из txt

Всем привет. Подскажите пожалуйста как считать данные из txt которые ограничены пробелом
пример txt:
Вася 123.123.123.123
Константин 14.14.13.13
И так далее....
я хочу сделать цикл что бы по нажатию одной кнопки из txt считывался ip и заносился в переменную далее делались процедуры и в конце опять возврат в начало цикла запись уже со второй строки второго ip и т д пока цикл не дойдёт до конца списка...
Подскажи как считать со строчки данные после разделителя в данном случае пробел..
Чтение txt через TStringList.
За ранее благодарен за любую подсказку.
Ответить с цитированием
  #2  
Старый 30.07.2013, 05:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,094
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Функция Pos спасет отца русской демократии.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
  Name : String;
  IP : String;
  Idx : Integer;
begin
  ...
  S := StringList[i];
  Idx := Pos(' ',S);
  If Idx > 0 Then
    Begin
      Name := Copy(S,1,Idx-1);
      IP := Copy(S,Idx+1,Length(S)-Idx+1);
      ...
    End;
...
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
SkiHunter (30.07.2013)
  #3  
Старый 30.07.2013, 12:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
Функция Pos спасет отца русской демократии
Ну это вы погорячились. Автор использует TStringList и pos там совсем ни к чему.
Просто надо грузить текст в DelimitedText. В итоге получите набор строк с ip в каждой строке. А если еще флаг на дубликаты врубить, то получите список уникальных ip.
Вот примерчик:
Код:
1
2
3
4
5
6
7
8
9
10
Var
  SL: TStringList;
begin
 SL := TStringList.Create;
 SL.Delimiter := ' ';
 SL.Duplicates := dupIgnore;
 SL.Sorted := True;
 SL.DelimitedText := '1.1.1.1 1.1.1.2 1.1.1.3'#13'1.1.1.4 1.1.1.5 1.1.1.6 1.1.1.6';
 Memo1.Lines := SL;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 30.07.2013 в 12:23.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
SkiHunter (30.07.2013)
  #4  
Старый 30.07.2013, 20:21
SkiHunter SkiHunter вне форума
Прохожий
 
Регистрация: 29.07.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию что то не получается (((

Что то ни как не могу справиться с вашими подсказками....
Вот исходник моего клиента
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
unit CliUnit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls, ComCtrls, ExtCtrls, Grids, Menus, XPMan;
 
type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    StringGrid1: TStringGrid;
    Button3: TButton;
    PopupMenu1: TPopupMenu;
    Rebott1: TMenuItem;
    Shutdown1: TMenuItem;
    Explorer1: TMenuItem;
    KillIE1: TMenuItem;
    XPManifest1: TXPManifest;
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure ClientSocket1Write(Sender: TObject;
      Socket: TCustomWinSocket);
     procedure Rebott1Click(Sender: TObject);
    procedure Shutdown1Click(Sender: TObject);
    procedure Explorer1Click(Sender: TObject);
    procedure KillIE1Click(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
 
  private
    { Private declarations }
 
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  constat:boolean = false;
  t1:string; /// ip адрес
  t2:string; /// команда
  t3:string; /// переменная для цикла (IP)
  sl:TStringList;
 
implementation
 
{$R *.dfm}
 
 
 
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText(t2);
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
List:TStringList;
s,pole:string;
i:integer;
k:integer;
j:integer;
 
begin
  sl:= TStringList.Create();
  sl.LoadFromFile('ff.txt');
 
StringGrid1.Visible:=true;
stringgrid1.Cells[0,0]:='Terminal';
stringgrid1.Cells[1,0]:='IP';
stringgrid1.Cells[2,0]:='Status';
/////Загружаем в лист содержимое БД
List:=TStringList.Create;
List.LoadFromFile('ff.txt');
StringGrid1.RowCount:=List.Count+1;
/////Загружаем в стриг грид содержимое БД
for i:=1 to List.Count do begin
  k:=0;
  s:=List[i-1];
    for j:=1 to length(s) do begin
    if s[j]<>' ' then pole:=pole+s[j]
                 else begin stringGrid1.Cells[k,i]:=pole; pole:='';inc(k)   end;
 
    end;
 
end;
end;
 
///////////  Занести значение выделенной ячейки в t1////////
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
 t1:=StringGrid1.Cells[ACol, ARow]
 end;
/////////////////////////////////////////////////////////////
 
procedure TForm1.ClientSocket1Write(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ClientSocket1.Active:=false;
end;
 
procedure TForm1.Rebott1Click(Sender: TObject);
begin
     t2:='start reboot.cmd';
     ClientSocket1.Address:=t1;
     ClientSocket1.Active:=true;
end;
 
procedure TForm1.Shutdown1Click(Sender: TObject);
begin
     t2:='start poweroff.cmd';
     ClientSocket1.Address:=t1;
     ClientSocket1.Active:=true;
end;
 
procedure TForm1.Explorer1Click(Sender: TObject);
begin
     t2:='start iexplore.exe';
     ClientSocket1.Address:=t1;
     ClientSocket1.Active:=true
 
end;
 
procedure TForm1.KillIE1Click(Sender: TObject);
begin
     t2:='start taskkill /IM iexplore.exe /T /F';
     ClientSocket1.Address:=t1;
     ClientSocket1.Active:=true
end;
 
procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
ShowMessage('Ничего страшного');
end;
 
end.
при запуске клиента он подгружает в стринг грид txt
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
Terminal1 192.168.0.1
Terminal2 192.168.0.2
Terminal3 192.168.0.3
Terminal4 192.168.0.4
Terminal5 192.168.0.5
Terminal11 192.168.0.11
Terminal12 192.168.0.12
Terminal13 192.168.0.13
Terminal14 192.168.0.14
Terminal15 192.168.0.15
Terminal16 192.168.0.16
Terminal17 192.168.0.17
Terminal18 192.168.0.18
в первую колонку имена во вторую ip хочу сделать кнопку что бы по команде клиент отправлял команду на все ip которые в этом txt. попробовал ваши способы что то не помогает ((( подскажите ещё раз пожалуйста.
Ответить с цитированием
  #5  
Старый 30.07.2013, 22:22
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

если есть возможность изменить текстовый файлик таким образом
Код:
1
2
3
4
Terminal1=192.168.0.1
Terminal2=192.168.0.2
Terminal3=192.168.0.3
...
то, загрузив в TSTringList проще воспользоваться свойством Value или ValueFromIndex
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #6  
Старый 30.07.2013, 23:05
SkiHunter SkiHunter вне форума
Прохожий
 
Регистрация: 29.07.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

ну... если ты в коде сможешь исправить заполнение в стринг гриде то можно и равно поставить
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025