| 
| 
 | Вопрос # 2 471/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!У меня возникла проблемма, всё никак нормальным образом не могу считать имеющийся текстовый фаил и с ним работать...Фаил просто представляет из себя набор строк и в каждой строке 0-4 строковых элементов...(0-пустая строка).
 Делов том, что в файле может быть много строчек и работа будет медленной если использовать AssignFile....
 Я вот попробовал считывать данный фаил используя TStrings...см приложение
 Но наворочено получилось в нём много, думаю можно много проще...
 И вопрос по работе со считанными данными, я понимаю что это сугубо индивидуально, и каждый по разному может работать, вот в данный момент я записываю фаил в динамический массив и далее с ним работаю, а можно использовать потоки, правда не знаю как этого сделать... Застопарился я на динамических массивах, всё никак не могу перейти на ооп, толчка нехватает...
 Да и дальнейшая работа заключается в разбиении этого фала на группы, делаю я это опять же динамическими массивами--что в конечном случае становится очень неудобным и сложным...
 
 В архиве прикрепляю мою програмку целиком, с файлом из которого нуно взять инфу(AreaCounter)Конечным результатом должен получиться экселевский фаил...Посмотрите пожалуйста кому не лень...
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим type  FuncResultU2 = array of array of string;  TMyClassU2 = class(TForm)  private    { Private declarations }  public    { Public declarations }     function FiletoMassive(Name:string):FuncResultU2;  end;  var   MyClassU2:TMyClassU2; implementation uses unit1,unit3; { MyClass } function TMyClassU2.FiletoMassive(Name: string):FuncResultU2;var  s1,s2:TStrings;     i,j:integer;     d:string;     k:pChar;      Results:FuncResultU2;     Row,Col:integer;begin   s1:=TStringList.Create;   s2:=TStringList.Create;   Col:=-1;   Row:=-1;     try       s1.LoadFromFile(Name);       SetLength(Results,s1.Count+1,4);         for i:=0 to s1.Count-1 do          begin            Row:=Row+1;            s2.Add(s1.Strings[i]);            s2.QuoteChar:=' ';            s2.Delimiter:=' ';            k:=PChar(' '+s2.DelimitedText+' ');            d:='';            j:=0;              while j<=Length(k) do               begin                 if k[j]<>' ' then                   d:=d+k[j]                 else                   if d<>'' then                     begin                        Col:=Col+1;                          if Col<=3 then                            Results[Row,Col]:=d                          else                            j:=Length(k);                        d:='';                     end;                j:=j+1;               end;            Col:=-1;            s2.Clear;            Application.ProcessMessages;          end;       FiletoMassive:=Results;     except        s1.Clear;       s1.Free;       s2.Clear;       s2.Free;       FiletoMassive:=nil;     end;   s1.Clear;   s1.Free;   s2.Clear;   s2.Free;end;
|  |   Вопрос задал: Arriba (статус: Посетитель)Вопрос отправлен: 1 марта 2009, 23:42
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 2 марта 2009, 22:53; участников в обсуждении: 2. 
|   | Мережников Андрей (статус: Абитуриент), 2 марта 2009, 00:15 [#1]:все таки непонятно, чего Вы хотите добиться от файла. Было бы проще, если бы Вы поделились идеей получения конечного результата. И форматом файла (что Вы подразумеваете,например, под строковым элементом?) |  
|   | Arriba (статус: Посетитель), 2 марта 2009, 01:39 [#2]:Извиняюсь чёт я загнул, это коллисечтво слов в одной строке... 
 Опишу полностью...Есть фаил areacounter.rox--текстовй фаил, я в Unit2 считываю данный фаил в массив динамический размером в 4 столбика(не взирая на то что в файле может в одной строчке быть больше чем 4 слова) и строк столько сколько в файле+1.После загрузки я передаю этот массив в Unit3, Unit1 служит как бы связкой,остальных Unit'ов, далее в Unit3 я считываю часть данных из исходного динамического массива в 4 динамических массива(тут получается массив массивов-например[][,])Эти массивы выглядят примерно как первые 4 таблицы в экселевском файле(в архиве который).Далее снова через Unit1 все полученные данные я передаю в Unit4 в котором происходит формирование 5 динамического массива(соответствует частично 5 таблице из экселевского файла в архиве) Формируется шапка выходного файла и записывается как бы первый считанный блок... потом программа переходит в Unit5 в котором происходят проверки на различия одной части файли со следующей и если нужно перезаписываются массивы и данные вносятся в конечный экселевский фаил, после чего он выдаётся сообщение о сохранении и сохраняется...
 Данный способ очень мудрёный с использованием динамичих массивов, я уже сам конкретно путатться начинаю...поэтому хочу переделать и оптимизировать, упрастив считывание файла, и отказавшись от использования динамических массивов...
 |  
|   | Arriba (статус: Посетитель), 2 марта 2009, 01:43 [#3]:Конкретно формат исходного файла легко понимается после того как сравнишь фаил areacounter.rox с полученной в конце концов экселевской таблицей... |  
|   | Мережников Андрей (статус: Абитуриент), 2 марта 2009, 20:19 [#4]:каким символом разделяются слова в строке и что происходит с лишними словами? |  
|   | Arriba (статус: Посетитель), 2 марта 2009, 22:53 [#5]:Очень просто, слова в строке разделяются пробелом, а лишние слова(т.е. если в строке больше 4 слов) просто игнорируются, в одну строку массива то считываю лишь 4 слова... |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |