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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2012, 18:28   #1
koma00
Новичок
Джуниор
 
Регистрация: 07.02.2012
Сообщений: 7
По умолчанию Ввод слов из текста в массив

Здраствуйте. Нужно перевести текстовый документ с содержимым типа
Цитата:
слово1 слово2
слово3 слово4
слово5 слово6
слово7 слово8
в двухмерный массив. Что бы в нём было например
Цитата:
a[1,1]:=слово1;
a[1,2]:=слово2;
a[2,1]:=слово3
и так дальше. Дайте пожалуста исходный код такой подпрограммы. Заранее спасибо
koma00 вне форума Ответить с цитированием
Старый 07.02.2012, 22:21   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

И в чем у вас проблема???
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 07.02.2012, 23:16   #3
koma00
Новичок
Джуниор
 
Регистрация: 07.02.2012
Сообщений: 7
По умолчанию

Вот мой исходный код
Код:
program stoluci;

var
   a: array [1..354, 1..2] of char;
   i,j:integer;
   f:text;

procedure vvod;

begin
     assign(f,'input.txt');
     reset(f);
     for i:=1 to 354 do
         for j:=1 to 2 do
             read(f, a [i, j]);
     close(f);
end;

begin
     vvod;
end.
Проблема заключаеться в том что в каждой ячейке массива храниться только одно буква. А мне нужно что бы хранилось слово. Как мне это исправить??
koma00 вне форума Ответить с цитированием
Старый 08.02.2012, 10:06   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Все потому что у вас массив создан как массив символов(char), а надо строк(string).
в вашем случае должно быть
Код:
a: array [1..354, 1..2] of string;
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.02.2012, 10:22   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Все потому что у вас массив создан как массив символов(char), а надо строк(string).
в вашем случае должно быть
Код:
a: array [1..354, 1..2] of string;
в TurboPascal не хватит памяти под данную структуру!

но тогда можно попытаться ограничить длину.
Например, если длина любого слова не больше 50 символов, тогда можно написать так:
Код:
var
   a: array [1..354, 1..2] of string[50];
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.02.2012, 10:44   #6
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Либо ограничьте размер всего массива.
Как вариант.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.02.2012, 14:16   #7
koma00
Новичок
Джуниор
 
Регистрация: 07.02.2012
Сообщений: 7
По умолчанию

При изминении типа массива на string или string[50] у меня вводиться только одна строка из файла. Остальное содержимое файла в массив не попадает
koma00 вне форума Ответить с цитированием
Старый 08.02.2012, 14:33   #8
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Попробуйте readln()
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.02.2012, 15:23   #9
koma00
Новичок
Джуниор
 
Регистрация: 07.02.2012
Сообщений: 7
По умолчанию

readln помог спасибо. Но теперь другая проблема в ячейку массива вводиться целая строка (в ней 2 слова), а мне нужно что бы в одну ячейку массива вводилось только одно слово.
koma00 вне форума Ответить с цитированием
Старый 08.02.2012, 15:33   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

смотрите пример. (я читаю файл построчно и разбираю (parse) строку, считая, что первое слово до первого пробела (все начальные пробелы в начале строки я удаляю), всё, что после после пробела, расположенного за первым словом - считаем вторым словом (даже если там будет НЕСКОЛЬКО СЛОВ!)

это выглядит так:
Код:
program stoluci;

Const 
  MaxRow = 354;

var
  a: array [1..MaxRow, 1..2] of string[50];
  CountRowInArray : integer; {количество реально заполненных строчек в матрице}

procedure vvod;
var
   f :text;
   i,j :integer;
   s : string;
begin
  assign(f,'input2.txt');
  reset(f);

  {сначала очистим массив полностью}
  for i:=1 to MaxRow do
      for j:=1 to 2 do a[i,j] := '';

  {прочитаем файл в массив}
  CountRowInArray := 0;
  while not eof(f) do begin
    Readln(f, s);
    {удалим все пробелы в начале строки}
    while ( Length(s)>0 ) and (s[1]=' ') do Delete(s,1,1);

    {если строка не пустая распарсим её}
    if (Length(s)>0) and (Pos(' ',s)>0) then begin
      if CountRowInArray < MaxRow then begin
        inc(CountRowInArray);
        a[CountRowInArray, 1] := Copy(s, 1, Pos(' ',s)-1);
        delete(s, 1, Pos(' ',s)-1 );
        {удалим все пробелы в начале строки}
        while ( Length(s)>0 ) and (s[1]=' ') do Delete(s,1,1);
        {всё, что осталось в строке - считаем вторым словом!
           Внимание! Включая и пробелы внутри и в конце, если они есть там, конечно!}
        a[CountRowInArray, 2] := s;
      end
      else Break;
    end;
  end;
  close(f);
end;

var
  i, j : integer;
begin
  vvod;

  {для отладки просто выведём результат}
  WriteLn('прочитанный файл: ');
  for i:=1 to CountRowInArray do begin
      for j:=1 to 2 do Write(a[i,j],' ');
      WriteLn;
  end;

  Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка слов из текста matrosken Помощь студентам 9 30.05.2010 09:53
Выделение зарезервированых слов в редакторе текста PVD Компоненты Delphi 5 02.02.2010 17:11
по вводу слов в массив и подсчёт введённых слов -ushёl- Общие вопросы C/C++ 4 16.11.2009 00:45
Удаление слов из текста Gery Помощь студентам 24 22.09.2009 14:37
Ввод текста pali4ev Общие вопросы Delphi 1 18.12.2008 01:01