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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2015, 14:28   #1
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
По умолчанию Чтение из текстового файла в переменную

Доброго времени суток форумчане. Подскажите, пожалуйста, как реализовать следующую программу:

1. Есть тектовый файл:
Код:
4310139A000PB9;ГАЛИНА;АЛЕКСАНДРОВНА;КОШЕЛЬ;19390131;MH;0010330;17/03/1995;ПЕРВОМАЙСКИЙ РОВД Г.МИНСКА;11200001;8;0;1;0;29;11100001;35;11906424;7;11700003;38;11400826;34;16;;137
4010139A000PB0;ОЛЬГА;ТИХОНОВНА;ДИВИНА;19390101;MH;0010359;17/03/1995;ПЕРВОМАЙСКИЙ РОВД Г.МИНСКА;11200001;8;0;1;0;29;11100001;35;11906424;7;11700003;38;11400724;34;22;;28
4190639A000PB6;НИНА;АЛЕКСЕЕВНА;КАЗАЗЯН;19390619;MH;0010355;17/03/1995;ПЕРВОМАЙСКИЙ РОВД Г.МИНСКА;11200001;8;0;1;0;29;11100001;35;11906424;7;11700003;38;11401062;34;74;2;14
4240439A000PB8;ТАМАРА;СЕМЁНОВНА;ЗОЛОТАРЁВА;19390424;MH;0010365;17/03/1995;ПЕРВОМАЙСКИЙ РОВД Г.МИНСКА;11200001;8;0;1;0;29;11100001;35;11906424;7;11700003;38;11400173;34;70;;86
4260839A000PB2;ОЛЬГА;АНАТОЛЬЕВНА;ТКАЧЕНКО;19390826;MH;0010092;16/03/1995;ПЕРВОМАЙСКИЙ РОВД Г.МИНСКА;11200001;8;0;1;0;29;11100001;35;11906424;7;11700003;38;11400161;34;6;;32
Нужно первые 7 значений (каждое из которых разделено знаком ";") записать в свою переменную. Остальные данные не нужны.
Kazik вне форума Ответить с цитированием
Старый 28.09.2015, 15:02   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

примерный набросок:

Код:
var 
  TSAll, ts : TStringList;
  i, j : integer;
  resArr : array[0..6] of string;
begin
  TSAll := TStringList.Create;
  TSAll.LoadFromFile('Тут имя вашего файла');

  ts := TStringList.Create;
  ts.Delimiter := ';';

  for i:=0 to TSAll.Count-1 do begin
    ts.DelimitedText := TSAll.Strings[i];
    if ts.Count>=7 then begin
       for j:=0 to 6 do begin
              resArr[j] := ts.Strings[j];
              ShowMessage(IntToStr(j)+'-е значение = '+resArr[j]);
       end;
    end;
  end;
  FreeAndNil(ts);
  FreeAndNil(TSAll);
end;
идея понятна?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.09.2015, 15:03   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно. Я бы скорее всего в ODBC настроил провайдер для работы с CSV файлами.
К нему подключил компонент ADOQuery, в котором бы запросом собрал данные в таблицу из этого твоего файла.
Цитата:
ts.Delimiter := ';';
Сережа, а ты уверен что под разделитель не попадут пробелы?
Я лично нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.09.2015, 15:06   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
Сережа, а ты уверен что под разделитель не попадут пробелы?
Нет, не должны!

Но. Виталий, я, до тех пор, пока не проверил код, конечно, 100% в этом не уверен.
Поэтому и написал "примерный" набросок кода...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.09.2015, 15:32   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нет, не должны!
В D6 я с такой проблемой сталкивался...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.09.2015, 18:36   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

В качестве альтернативы набросал пример:
Код:
var
  s: string;
  cells: array[1..7] of string;
  i, p: integer;
begin
  s:='4310139A000PB9;ГАЛИНА;АЛЕКСАНДРОВНА;КОШЕЛЬ;19390131;MH;0010330;17/03/1995;ПЕРВОМАЙСКИЙ РОВД Г.МИНСКА;11200001;8;0;1;0;29;11100001;35;11906424;7;11700003;38;11400826;34;16;;137';
  for i := 1 to 7 do begin
    p := pos(';', s);
    cells[i] := copy(s, 1, p - 1);
    delete(s, 1, p);
    showmessage(cells[i]);
  end;
end;
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение текстового файла(С) C@rbon Помощь студентам 8 18.10.2014 23:41
Чтение текстового файла Елена77 C# (си шарп) 1 29.04.2013 23:28
Чтение из текстового файла Form_13 Помощь студентам 0 01.11.2011 03:16
Чтение из текстового файла soirkar Visual C++ 6 22.06.2011 16:58
Подстановка значения в переменную из текстового файла. Niodar Общие вопросы Delphi 2 22.03.2009 19:34