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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 15:01   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да запросто. Вернемся (опять) к моему примеру парсера слов:http://www.programmersforum.ru/showt...369#post398369
Тут вместо пробела поставишь подчерки, и будет тебе массив из строки.
Можно конечно через TStringList разделить, но вдруг между подчерками пробел будет, а он посчитает что это разделитель.

Кста, по этому поводу я его себе переделал:
Код:
 TStringList=class(Classes.TStringList)
  private
    FParsedText: String;
    procedure SetParsedText(const Value: String);
    Function GetParsedText:String;
 Public
  ParsedTextDelimiter:string;
  Property ParsedText:String read GetParsedText write SetParsedText;
 end;
Код:
{ TStringList }


function TStringList.GetParsedText: String;
var i:integer;
begin     Result:='';
 for i:=0 to self.Count-1 do
  Result:=result+Strings[i]+ParsedTextDelimiter;
end;

procedure TStringList.SetParsedText(const Value: String);
var i,e:integer;
begin
 Clear;e:=0;    Add('');
 i:=1; while i<=length(Value) do begin
 if copy(Value,i,length(ParsedTextDelimiter))<>ParsedTextDelimiter then begin
   Strings[count-1]:=Strings[count-1]+Value[i];
   inc(i);
  end else begin
   inc(i,length(ParsedTextDelimiter));
   Add('');
  end;
 end;
 if Strings[count-1]='' then Self.Delete(count-1);
end;
Исправив этот баг с пробелом, и улучшив - теперь разделителем может быть строка.

Так что выбирай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2010, 15:07   #12
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Stilet, спасибо, сейчас попробую разобраться. Нет, пробела там точно не будет. Это 200%. .
.......................
А как все это чудо применить конкретно к моей задаче? К компонентам ShellListView и StringGrid.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 11.06.2010 в 15:20.
artemavd вне форума Ответить с цитированием
Старый 11.06.2010, 18:33   #13
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Вот, нашел код, который грузить список файлов из папки в StringGrid. По задумке основное почти то, что надо. Как его переделать, чтобы у меня файлы грузились из папки, которую я выбрал в ShellTreeView? Куда чего подставить?
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
 TempFileList:TStringList;
 SelFolder:string;
 i,j: integer;
begin
  TempFileList:= TStringList.Create;
  ListFileDir(Form1.ShellTreeView1.Path,TempFileList);
  if TempFileList.Count>0 then
  begin
    for i:=0 to TempFileList.Count-1 do
    begin
      if i=0 then
      begin
        StringGrid1.Cells[0,1]:=ExtractFileName(TempFileList.Strings[i]);
        StringGrid1.Cells[1,1]:=ExtractFileExt(TempFileList.Strings[i]);
        StringGrid1.Cells[4,1]:=Form1.ShellTreeView1.Path;
      end
      else if i>0 then
      begin
        StringGrid1.Cells[0,i+1]:=ExtractFileName(TempFileList.Strings[i]);
        StringGrid1.Cells[1,i+1]:=ExtractFileExt(TempFileList.Strings[i]);
        StringGrid1.Cells[4,i+1]:=Form1.ShellTreeView1.Path;
      end;
    end;
  end;
  TempFileList.Free;
end;
также пытаюсь сделать так, чтобы в другую колонку для всех строк заносились первые 3-5 символов (точное число неизвестно). Я пробовал циклом так:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
 i,j: integer;
begin
 for i:=1 to Form1.StringGrid1.RowCount do
 begin
  Form1.StringGrid1.Cells[2,i]:=Form1.StringGrid1.Cells[0,i][1] +Form1.StringGrid1.Cells[0,i][2] +Form1.StringGrid1.Cells[0,i][3];
 end;
end;
Но вылетает ошибка AccessViolation. Проблемка в чем. В том, что первые символы могут со времнем измениться. То есть сейчас мне нужно три, потом их будет 4, 5 и т.д, а после них идет символ "_". Нужно как-то добавить в цикл условие, чтобы отбрались вначале строки только те числа, которые находятся до знака "_". Как это можно кодом сделать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 11.06.2010 в 19:06.
artemavd вне форума Ответить с цитированием
Старый 14.06.2010, 07:39   #14
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Ребята, ну неужели никто не знает ответ на мой последний вопрос?
Кстати, код, про 3-5 символов я подправил немного:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
 i,j: integer;
begin
 if IntToStr(i) <> '' then
 for i:=1 to Form1.StringGrid1.RowCount do
 begin
  Form1.StringGrid1.Cells[2,i]:='      ' + Form1.StringGrid1.Cells[0,1][1] +
                                           Form1.StringGrid1.Cells[0,1][2] +
                                           Form1.StringGrid1.Cells[0,1][3] ;
 end;
end;
P.S. А почему я не могу отредактировать свои предыдущие сообщения??
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа на delphi Ericnex Помощь студентам 1 19.05.2010 21:24
Работа с файлами и папками dron4ikkkk JavaScript, Ajax 1 07.11.2009 23:51
Проблемма с файлами и папками SlashMan Общие вопросы Delphi 2 13.08.2009 17:15
Работа с папками в Дельфи Космос Помощь студентам 2 10.10.2007 20:47