Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2014, 02:54   #1
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
Печаль Команды в консоли

Доброе время суток!
Подскажите пожалуйста что то не могу сообразить(
Есть ини например:
Код:
[UserCoun]
Count=3
[User001]
Name=Вася
Path=Вася\Вася.dat
[User002]
Name=Не Вася
Path=Не Вася\Не Вася.dat
[User003]
Name=Ваще не Вася
Path=Ваще не Вася\Ваще не Вася.dat
И Вась может быть не определённое количество.
Код:
uses
  SysUtils,
  IniFiles,
  Classes,
  ShellAPI;

label Flag1;
var 
  Run: array[1..999] of string;
  DescriptionList: array[1..999] of string;
  ListFile: array[1..999] of string;
  Path: string;
  CountStr:String;
  ListNames:TStringList;
  Str,qq: string;
  i1,i2,i3:integer;

function Rus(mes: string):string;
var i: integer;
begin
for i:=1 to length(mes) do
case mes[i] of
'À'..'ï' : mes[i] := Chr(Ord(mes[i]) - 64);
'ð'..'ÿ' : mes[i] := Chr(Ord(mes[i]) - 16);
end;
rus := mes;
end;

procedure FormActivate;
var 
  i, n, k, Found: integer; 
  SearchRec: TSearchRec; 
  ini: TIniFile;
  Category, Name, Description, RunPath: string; // äóìàþ, ÿñíî èç 
íàçâàíèé
begin
  ListNames:=TStringList.Create;
  CountStr := '0';
  Path := ParamStr(0)+'User\';
Path := extractfilepath(ParamStr(0))+'User\';
  i := 1;
  Found := FindFirst(Path + 'UserNames.ini', faVolumeID, SearchRec);
  while Found = 0 do
  begin
    if FileExists(Path + SearchRec.Name) = true then
    begin
       ListFile[i] := Path + SearchRec.Name;
      Inc(i); 
    end;
    Found := FindNext(SearchRec); 
  end;
  FindClose(SearchRec);
  ListFile[i] := 'END';
  if ListFile[1] = 'END' then
    Write(Rus('Íà äèñêå ' + Path + ' íå íàéäåíî
 íè îäíîãî 
êîíôèãóðàöèîííîãî
ôàéëà.')); 
k := 1;
for i := 1 to 999 do
begin
  if ListFile[i] = 'END' then
    Break;
  ini := TIniFile.Create(ListFile[i]); 
  CountStr:= IntToStr(StrToInt(CountStr) + ini.ReadInteger('UserCoun','Count', 0));
    for n := 1 to ini.ReadInteger('UserCoun','Count', 0) do
  begin
    Category := ini.ReadString('User' + Format('%.3d', [n]), 'Name', 'áåç 
êàòåãîðèè'); 
    if ListNames.IndexOf(Category) = -1 then
    begin
      ListNames.Add(Category); 
    end;
  end;
end;
ini.Free;
Write(Rus('Â äàííûé ìîìåíò â 
ïðîãðàììå ' + CountStr + ' Ñòàòüè.')+#10#13);
end;

begin
FormActivate;
Flag1:
for i1:=0 to ListNames.Count-1 do
begin
writeln(inttostr(i1)+') '+ListNames.Strings[i1]);
end;
readln(qq);
как создать команды именно создать! изначально не известно сколько вась?
например:
Код:
if(qq='0')then
Str:=Вася\Вася.dat; 
if(qq='1')then 
Str:=Не Вася\Не Вася.dat; 
и тд и тп
goto Flag1;
Заранее благодарен!
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!

Последний раз редактировалось Stilet; 30.01.2014 в 09:04.
Volkogriz вне форума Ответить с цитированием
Старый 30.01.2014, 03:19   #2
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от Volkogriz Посмотреть сообщение
изначально не известно сколько вась?
Посчитай, станет известно. В чём проблема?
Цитата:
Сообщение от Volkogriz Посмотреть сообщение
Заранее благодарен!
Это как? Не знаешь помогут ли а уже благодарен? Жестяк.

Последний раз редактировалось doktor255; 30.01.2014 в 03:27.
doktor255 вне форума Ответить с цитированием
Старый 30.01.2014, 03:29   #3
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Я имею введу изначально до загрузки ини количество не известно так что создавать надо в процессе загрузки программы.
Цитата:
Это как? Не знаешь помогут ли а уже благодарен? Жестяк.
Объясняю, это когда человек меня не проигнорировал чем то попытался помочь, даже если вошёл в тему и вышел.
Он проявил интерес,даже за такие понты как ваши)))
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 30.01.2014, 03:37   #4
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Цитата:
Сообщение от Volkogriz Посмотреть сообщение
так что создавать надо в процессе загрузки программы.
Попробуй создавать попугаев .
По русски объясни что тебе нужно, и что не получается.
Цитата:
Сообщение от Volkogriz Посмотреть сообщение
даже если вошёл в тему и вышел.
Несусветная чушь. Людей нужно благодарить когда они что-то для тебя сделали, а не заранее неизвестно за что.

Последний раз редактировалось doktor255; 30.01.2014 в 03:51.
doktor255 вне форума Ответить с цитированием
Старый 30.01.2014, 04:53   #5
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Цитата:
Я зашёл, и вышел. Ты мне уже благодарен? Признайся, ты понял, что чушь сморозил. Просто не желаешь признавать.
очень!

procedure TForm1.ListBox2Click(Sender: TObject);
begin
Label1.Caption := Path[ListBox1.ItemIndex + 1];
end;
типо зтого
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 30.01.2014, 05:04   #6
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Ну кликнул ты по ListBox. Ну получил Caption по индексу. Лично мне это вообще ни о чём не говорит. РУССКИМ языком задачу озвучь.
doktor255 вне форума Ответить с цитированием
Старый 30.01.2014, 05:38   #7
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Да только в консоли, вводя цифры от 0 до TStringList.Count показать строку индекса в TStringList как это осущиствить
if(qq=не известно какое число)then//Число не меньше 0 и не больше TStringList.Count
write(TStringList.Strings[StrToInt(qq)]);
Как то так.
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 30.01.2014, 06:00   #8
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Перевёл.
Код:
if StrToInt(qq) in [0..TStringList.Count - 1] then
 write(TStringList.Strings[StrToInt(qq)]);
Дальше что?

Последний раз редактировалось doktor255; 30.01.2014 в 06:02.
doktor255 вне форума Ответить с цитированием
Старый 30.01.2014, 16:23   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

doktor255, оператор in не работает с величинами выше числа, каковое есть в Вашем нике (ограничение типа set). Поэтому можно долго удивляться почему не работает программа при других наборах входных данных, нежели маленький тестовый.

Ну, а подсчитать кол-во секций в инифайле можно с помощью http://docwiki.embarcadero.com/Libra...e.ReadSections
Что-то типа
Код:
function IniSectionCount(FName: string): Integer;
var
  SL: TStringList;
  FIniFile: TMemIniFile;
begin
  Result := -1;
  FIniFile := TMemIniFile.Create(FName);
  SL := TStringList.Create;
  try
    FIniFile.ReadSections(SL);
    Result := SL.Count;
  finally
    SL.Free;
    FIniFile.Free;
  end;
end;
Циклом по секциям можно и создавать то, что там нужно, забирая данные из инишки, имена секций же брать из листа.
phomm вне форума Ответить с цитированием
Старый 30.01.2014, 16:28   #10
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

При чём тут числа и ник? Я вообще не понимаю, о чём речь.
doktor255 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Команды KostyaS Свободное общение 2 03.04.2011 16:58
Команды cargo29 Работа с сетью в Delphi 2 16.12.2010 13:14
окно консоли alex_alpha Общие вопросы C/C++ 2 06.04.2010 22:21
2 команды Aivar Помощь студентам 2 01.10.2008 19:23
Есть ли аналог команды chmod в консоли винды? Stilet Операционные системы общие вопросы 1 19.08.2008 13:58