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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2013, 20:20   #1
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию Access violation. строки. Массивы

В общем такая проблема. Нужно из текста вырвать строки, и занести их в массив. разделителем строк выступает символ
Код:
|
Код функции:
Код:
procedure RdTable(Line:TStrings;Vihod:TStrings);
type TArr= array of string;
var i,j,n,k,pred,w:longint;
    s:string;
    Texts: array of array of TArr;
    maxes:array of integer;
begin
   setlength(texts,0);
   n:=0;
   for i := 0 to Line.Count-1 do
     begin
       if Line.Strings[i][1]='+' then continue;
       if Line.Strings[i-1][1]<>'+' then
          begin
            inc(k);
            setlength(texts[n],k);
          end
       else
          begin
            inc(n);
            k:=1;
            setlength(texts,n);
            setlength(texts[n],k);
          end;
       pred:=1;
       w:=0;
       for j := 2 to length(string(line.Strings[i])) do
           if Line.Strings[i][j]='|' then
              begin
                s:=copy(string(Line.Strings[i]),pred+1,j-pred-1);
                pred:=i;
                while (length(s)>0)and(s[1]=' ') do delete(s,1,1);
                while (length(s)>0)and(s[length(s)]=' ') do delete(s,length(s),1);
                setlength(TArr(Texts[n-1][k-1]),w+1);
                TArr(Texts[n-1][k-1])[w] :=s;  // вот тут ошибка
                inc(w);
              end;
     end;


end;
Подскажите, как это решить, дорогие друзья.
ошибка только там, где я ее отметил
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 10.02.2013 в 20:22.
New man вне форума Ответить с цитированием
Старый 10.02.2013, 20:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
if (Texts[n-1][k-1]>=Low(TArr))and(Texts[n-1][k-1]<=high(TArr)) then
 TArr(Texts[n-1][k-1])[w] :=s
else
 Такого элемента массива не существует.
Проверяй так свой массив. Но я бы по другому переписал все.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.02.2013, 20:57   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тут с индексами пурга, зачем вообще 3-х мерный массив, такие вещи как
Код:
                while (length(s)>0)and(s[1]=' ') do delete(s,1,1);
                while (length(s)>0)and(s[length(s)]=' ') do delete(s,length(s),1);
можно просто командой s:=Trim(s); заменить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.02.2013, 21:09   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Сто раз обсуждалось

Код:
type TStringArray = array of AnsiString;

function SplitString(const Text: AnsiString; Delim: AnsiChar): TStringArray;
var
  sl: Tstringlist;
  i: Integer;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := {WideChar}(delim); // for unicode delphi use widechar
    sl.DelimitedText := WideString(Text);
    SetLength(Result, sl.Count);
    for i := 0 to sl.count - 1 do
      Result[i] := AnsiString(sl[i]);
  finally
    sl.Free;
  end;
end;

Последний раз редактировалось phomm; 10.02.2013 в 21:14.
phomm вне форума Ответить с цитированием
Старый 11.02.2013, 12:43   #5
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Спасибо всем!
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access violation dimavit Общие вопросы Delphi 3 29.07.2012 19:16
access violation ho_N Компьютерное железо 2 30.11.2011 08:36
ListView и Access violation Ronder Помощь студентам 6 22.08.2009 11:19
Access Violation SunKnight Общие вопросы Delphi 2 05.06.2008 16:46
Access Violation Carbon Общие вопросы Delphi 12 18.09.2007 19:55