Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Конвертация таблиц из DOS


Автор: gross 18.12.2004, 09:55
Требуется разработать приложение на Delphi, которое бы позволяло конвертировать данные из специализированной программы по учету телефонных разговоров( программа работает в режиме MS-DOS).Проблема возникает в следующем: тарификация звонков, представляющая собой таблицу, легко просматривается в фаре, можно ли эти данные сконвертировать в режим Windows, где была бы организована база данных, которая также была бы разработана в среде Delphi.Данная база позволяла бы расчитать количество, время, стоимость звонков по городам.

Автор: Vladimir13 18.12.2004, 10:00
базу то сделать просто ( расчитать время, стоимость...). С этим могу помочь ( сам страдал когда то)

Автор: Guest 18.12.2004, 12:37
Что-то я не понял по поводу Memo.Данный компонент необходимо поместить на форму и в редакторе кода прописать строку с указанием конверитуемого файла?

Автор: Гость_gross 18.12.2004, 12:39
Что-то я не понял по поводу Memo.Данный компонент необходимо поместить на форму и в редакторе кода прописать строку с указанием конверитуемого файла?

Автор: Vladimir13 18.12.2004, 12:41
перевожу: мы чуть чуть пообщались по ICQ, поэтому чать разговора опущена.
кидаешь Мемо на форму и например на button1.OnClick пишешь Memo1.Lines.LoadFromFile(' ');

Автор: gross 18.12.2004, 13:56
Владимир я периодически буду появляться в эфире.У меня почему вышеукаанным способом не получилось.Выдается при компиляции ошибка о не найденном пути, хотя он правильно прописан.
Добавлено @ 14:05
Да с очередной попыткой получилось запихать досовский файл в Memo.Что ты посоветуешь по поводу дальнейших действий. Каким образом программно можно получить читаемый текст?

Автор: Vladimir13 18.12.2004, 14:15
assignfile(F1,'file.txt');
reset(F1) - для открытия файла
clоseFile(F1) - закрыть

Автор: gross 18.12.2004, 14:26
Я не совсем понял.Это события для компонента Memo?
Добавлено @ 14:35
В assignfile F1 - что означает?

Автор: Vladimir13 18.12.2004, 14:41
assignfile F1 - это связь файла с программой

Автор: gross 18.12.2004, 14:54
Я правильно понял выше указанные команды связывают внедренный файл с приложением через переменную, а далее нужно уже программно рарешить проблему корректного отображения данных?

Автор: Vladimir13 18.12.2004, 15:12
все верно. можно так как я уже говорил

Автор: Bes 20.12.2004, 07:59
Че-то я не понял? проблема-то с кодировкой чтоли?.... режим дос - режим виндовс.... ?

Автор: gross 20.12.2004, 08:34
Да проблема с кодировкой.Как корректно отобразить данные из досовской программы в приложение Delphi, а там уже работать с этими данными в виде базы данных.

Автор: Bes 20.12.2004, 08:46
Посмотри команду вроде бы называется OEMtoAnsi и обратно, я такую задачку решал - получалось, ну а про базу данных вопрос отдельный.

Автор: Guest 20.12.2004, 10:56
А каким образом она используется?Эта команда аналогична OEMconvert?

Автор: Bes 20.12.2004, 13:23
аналогична или нет... Чего не знаю того не знаю. :-)
Как Используется? Ну посмотри там pchar-ы помоему....
Ща сам попробую.

Ага, вот так работает.

procedure TForm1.Button2Click(Sender: TObject);
var
Ch:PChar;
begin
Ch:=pchar(Memo1.Text);
OemToAnsi(PChar(Memo1.Text),Ch);
memo2.Text:=Ch;
end;

end.

Автор: Akella 20.12.2004, 14:55
я написал такую программку для печати DOS-текста
особую благодарность выражаю господину "posol", который любезно согласился и помог мне

в папке "txt" есть примеры файлов, с которыми работает эта программа
может быть прийдется поставить JEDDI(JCL122+JVCL200FinalFull),
Вам, наверное будет интересна эта процедура

Код

procedure TfmMain.opensouz(filename:string);
var
f : TextFile;
s, s2 : string;
MinLen, i, p, n : integer;
Widths : array of integer;
begin
 StringGrid1.RowCount:=1;
 StringGrid1.FixedCols := 0;
 AssignFile (f, filename);
 _sl.Add(filename);//добавляем файл в список удаления перед закрытием

// пропускаем ненужное до тех пор, пока не встретим шапку таблицы
 Reset (f);
 repeat ReadLn (f, s); until Pos(#$CD, s) <> 0;
 while (s[1] < #32) do Delete(s, 1, 1);//!!!
 MinLen := Length(s);//!!!

// читаем и формируем шапку таблицы
 SetLength (Widths, 0);
 repeat
  ReadLn (f, s);
  if Pos(#$B3, s) = 0 then Break;

  i := 0;
  while (s[1] < #32) do Delete(s, 1, 1);
  for i := 1 to Length(s) do if s[i] < #32 then s[i] := ' '; // !!!
  while Length(s) < MinLen do s := s + ' '; // !!!
  i:=0;

  OEMToChar(PChar(s), PChar(s));
  repeat
   p := 1;
   while (s[p] <> '¦') and (p <= Length(s)) do Inc(p);
   if p > 1 then
   begin
    if Length(Widths) < i+1 then
    begin
     SetLength(Widths, i+1);
     Widths[i] := p;
     StringGrid1.ColCount := i+1;
     StringGrid1.Cells[i, 0] := Copy(s, 1, p-1);
    end
    else begin
      //StringGrid1.Cells[i, 0] := StringGrid1.Cells[i, 0] + ' ' + Copy(s, 1, p-1);
    end;
    Inc(i);
   end;
   Delete (s, 1, p);
  until s = '';
 until false;
//  Widths[i] := p+20;//заявитель в заголовке 10 символов, а длина поля 20 символов
 StringGrid1.ColCount := StringGrid1.ColCount + 1;
 StringGrid1.Cells[StringGrid1.ColCount-1, 0] := 'Примечание';

//  Widths[0]:=25;
//  Widths[High(Width)-1]:=128;

// читаем данные
//n := 1;
n:=StringGrid1.RowCount;
while not EOF(f) do
begin
StringGrid1.RowCount := n+1;//+1;
ReadLn (f, s);
ReadLn (f, s2);
if (s = '') or (s2 = '') then break;

OEMToChar(PChar(s), PChar(s));
OEMToChar(PChar(s2), PChar(s2));
p := 1;
for i := 0 to Length(Widths)-1 do
begin
 StringGrid1.Cells[i, n] := Copy(s, p, Widths[i]);
 if i = Length(Widths)-1 then
 begin
  StringGrid1.Cells[i, n] := StringGrid1.Cells[i, n] + ' ' + Copy(s2, p, Widths[i]);
  StringGrid1.Cells[i+1, n] := Copy(s2, 1, p-1);
 end;
 Inc (p, Widths[i]);
end;
Inc(n);
end;

// выставляем ширину столбцов
for i := 0 to Length(Widths)-1 do
 StringGrid1.ColWidths[i] := Widths[i]*12;

StringGrid1.ColWidths[0] := 20;
StringGrid1.ColWidths[StringGrid1.ColCount-1] := 128;
CloseFile(f);
end;


Автор: gross 21.12.2004, 09:43
можно поодробнее о процедуре procedure TfmMain.opensouz(filename:string);

Автор: Bes 21.12.2004, 09:46
А что в две строчки писать уже не интересно? :-)

Автор: gross 21.12.2004, 09:47
Почему то мне было отказано в скачивании файла zip.

Автор: Akella 21.12.2004, 09:56
в этой процедуре открывается текстовый файл, можно сказать без разметки

всякий мусор
в несколько строк
-----------------------------------------------------------------------------------------
столбец1|столбец2 |столбец3 |
------------------------------------------------------------------------------------------
данне 1 данные данные
данне 2 данные данные
данне 3 данные данные
данне данные данные
данне данные данные

как видно в данных могут быть и пробелы

ширину столбцов для StringGrid узнанём из шапки
массив Width - это массив, содержащий ширины столбцов
затем вставляем в сетку данные
StringGrid1.Cells[i, n] := Copy(s, p, Widths[i]);-обратите внимание на
индекс "i"
в конце выставляем ширину столбцов

более подробно опишу, может быть, позже, а то клавиатура без русских символов, т.к. менеджер - девушка, соответственно ногти...

Автор: Alex103 28.2.2005, 07:56
Цитата(dsergey @ 20.12.2004, 14:55)
я написал такую программку для печати DOS-текста
особую благодарность выражаю господину "posol", который любезно согласился и помог мне

в папке "txt" есть примеры файлов, с которыми работает эта программа
может быть прийдется поставить JEDDI(JCL122+JVCL200FinalFull),
Вам, наверное будет интересна эта процедура

Я тут увидел программу для перекодировки текста из Дос в Виндовс. Помогите мне в моей истории. У вас возникла проблемма перекодировки в Текстовом файле а у меня в Базе данных dbf. Мне очень нужно прочитать эту базу в програмке на Делфи!! Помогите! И кстати не могли ли бы вы откомпилировать вашу програму и выслать мне ато когда я скачал ваш файл с кодом себе то при его открытии мне Делфи начал говорить что у меня не хватает компонентов или еще чего-то потом при запуске начал говорить что нехватает файлов. Мой майл [email protected] С ув. Александр

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)