Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.05.2011, 21:29
Регина Регина вне форума
Прохожий
 
Регистрация: 08.04.2008
Сообщения: 15
Репутация: 10
Восклицание сброс файла txt в Excel

тектовый файл содержит не просто набор слов, там таблица многострочная с столбцами естетственно и подстолбцами. в коде написала что создаю excel application как обычно, сначала открываю файл для чтения (заранее указав путь) затем открываю снова и построчно с помощью цикла считываю строки в переменную buf. у меня 2 вопроса: при отладке выходят какие-то закорючки, видимо кодировка глючит и как в цикле можно указать чтобы каждая строка сбрасывалась в каждую строку excel?
Ответить с цитированием
  #2  
Старый 29.05.2011, 01:36
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Код и файл в студию
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #3  
Старый 29.05.2011, 20:56
Регина Регина вне форума
Прохожий
 
Регистрация: 08.04.2008
Сообщения: 15
Репутация: 10
По умолчанию

вот файл, в коде думаю нет необходимости ничего ценного там нет (
Вложения
Тип файла: txt T0477163.txt (18.0 Кбайт, 15 просмотров)
Ответить с цитированием
  #4  
Старый 30.05.2011, 13:53
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Цитата:
тектовый файл содержит не просто набор слов, там таблица многострочная с столбцами естетственно и подстолбцами
Что-то особой структуры файла я не увидел там. Прям извращение какое-то Может я просто не сталкивался с этим (это мысли в слух..)

Цитата:
при отладке выходят какие-то закорючки, видимо кодировка глючит
Да дело в кодировке.

Цитата:
как в цикле можно указать чтобы каждая строка сбрасывалась в каждую строку excel?
Попробуй как-нибудь так:
Код:
var
  InFile: TextFile;
  k: Integer;
  Str: String;
begin
  k := 1;
  AssignFile(InFile, 'C:\InFile.txt');
  Excel.Workbooks.Add('C:\OutFile.xls', 0);
  Reset(InFile);
  while not EOF(InFile) do
    begin
      Readln(InFile, Str);
      Excel.Cells.Item[k, 1] := Str;
      Inc(k);
    end;
  CloseFile(InFile);
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #5  
Старый 30.05.2011, 20:42
Регина Регина вне форума
Прохожий
 
Регистрация: 08.04.2008
Сообщения: 15
Репутация: 10
По умолчанию

нет там не так все просто как кажется или мне тока так кажется...вот что у меня есть по этой теме
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
  D = [#9];
var
  F : TextFile;
  Str1, StrFld,Fn : String;
  i,k, Pos1, Pos2, Col, Row : Integer;
  EndRow : Boolean;
  exApp : Variant;
  exBook : Variant;
  exSheet : Variant;
begin
  try
    if OpenDialog1.Execute=false then exit;
    Fn:=OpenDialog1.FileName;

    exApp := CreateOleObject('Excel.Application');
    exApp.Visible := True;
    exBook := exApp.WorkBooks.Add;
    exSheet := exBook.WorkSheets[1];

    AssignFile(F, Fn);
    Reset(F);

    Pos1 := 0;
    Pos2 := 0;
    Col := 1;
    Row := 1;
    k:=0;
    EndRow := False;

    while not Eof(F) do
    begin
      Readln(F,Str1);
      for i := 1 to Length(Str1) do
      begin
        k:=k+1;
        if i = 1 then
          Pos1 := i
        else
          if Str1[i - 1] in D then
            Pos1 := i;
        if i = Length(Str1) then
        begin
          Pos2 := i;
          EndRow := True;
        end else
        if Str1[i + 1] in D then
          Pos2 := i;
        if Pos2 > 0 then
        begin
          StrFld := Copy(Str1, Pos1, Pos2 - Pos1 + 1);
          OemToChar(PChar(StrFld),pchar(StrFld));

{
          if k>12 then // позиция конца шапки(№ строки)
          begin

          exSheet.Cells[Row,1].Value :=copy(StrFld,1,23);
          exSheet.Cells[Row,2].Value :=copy(StrFld,24,3);
          exSheet.Cells[Row,3].Value :=copy(StrFld,27,8);
          exSheet.Cells[Row,4].Value :=copy(StrFld,35,8);
          end;
}
          Pos2 := 0;
          Inc(Col);
          if EndRow then
          begin
            Inc(Row);
            Col := 1;
            EndRow := False;
          end;
        end;
      end;
    end;
  finally
    try CloseFile(F) finally end;

    exSheet := Unassigned;
    exBook := Unassigned;
    exApp := Unassigned;
  end;
end;

в этом коде все данные в excel скидываются в одну ячейку книги, листа. а мне нужно чтобы получилось более менее похожее на таблицу, чтобы потом в экселе можно было проводить расчеты с помощью этих данных. для этого я начала кое-что делать это прописано в комментарии - но это тоже не особо верно, потому что шапка отчета тоже разделяется (и получаются обрывки слов, пустые места). помогите пожалуйста, дело еще в том, что после конца таблицы, шапка вновь будет повторятся с таблицей несколько раз, просто я выложенный файл сократила, так он весит 3 метров.
Ответить с цитированием
  #6  
Старый 31.05.2011, 13:12
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Цитата:
просто я выложенный файл сократила, так он весит 3 метров.
Из-за большого файла тебе хочется автоматизировать перевод из текстового файла в Excel и дальше уже работать с ним, т.к. ручками это все перебивать долго? Я тебя правильно понял?
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #7  
Старый 31.05.2011, 18:53
Регина Регина вне форума
Прохожий
 
Регистрация: 08.04.2008
Сообщения: 15
Репутация: 10
По умолчанию

нет это задание такое...видимо никаких предложений нет?
Ответить с цитированием
  #8  
Старый 01.06.2011, 12:09
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Если не сложно, то сделай пример файла excel как должно быть. Хотя бы одну запись, а то я не очень пойму шапку таблицы.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #9  
Старый 01.06.2011, 12:27
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Не запихать ваш отчет в эксель и в ворд через лексиконовский фильтр тоже не будет работать. Обработать ручками разово это еще можно, но вот написать конвертер для чтения данных в эксель из такого файла дело уже непростое и явно тянет на тему в Работе.
Если хочется сделать самой, то могу предложить такой алгоритм. Убрать все лишние строки которые не содержат данных, затем заменить все пробелы в определенных позициях на символ табуляции. Результат сохранить в новый файл. Вот такой файл вы уже сможете открывать в экселе и данные будут раскиданы по столбцам.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 01.06.2011 в 12:30.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter