Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Текстовый файл и массив 
:(
    Опции темы
TwisT_X
  Дата 1.1.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



Вот задание:
создать текстовый файл, содержащий несколько строк цифр:
-подсчитать количество чисел в файле и заполнить этими числами одномерный массив.

Я код сделал:

Код

program RGZ2_Ox;
{$APPTYPE CONSOLE}
uses
  SysUtils;

var MyText: text;
    s2, s1, path: string;
    k, i, j: integer;
    mas: array [0..100] of string;

begin
     path:= 'c:\file.txt';
     assign(MyText, path);
     reset(mytext);
     repeat
          readln(mytext, s1);
          writeln(s1);
     until eof(mytext);
     s2:= ' ';
     j:= 0;
     k:= 0;
     mas[j]:= '';
     repeat
          readln(mytext, s1);
          for i:= 1 to length(s1) do
          begin
               if s1[i] in ['0'..'9'] then
               begin
                    s2:= s2 + s1[i];
                    mas[j]:= s2;
               end
               else
               begin
                    inc(j);
                    inc(k);
               end;
               s2:=' ';
          end;
     until eof(mytext);
     close(myText);
     for j:= 0 to 100 do
          write(mas[j], ' ');
     writeln('kol-vo 4isel - ', k);
     write('najmi ENTER dl9 zaverLLIenia..');
     readln;
end.


Но почемуто массив пустой и количество чисел тоже равно нулю..
Помагите плиз.. smile 


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
SoWa
Дата 1.1.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 3
Всего: 74



Ой, как все сложно.
Код

var
f: text;
i: integer;
mas: array[1..32000] of byte;

begin
assign(f,'test.txt');
reset(f);
while not(eof(f)) do
 begin
  i:=i+1;
  read(f, mas[i]);
 end;
close(f);
end.


Это сообщение отредактировал(а) SoWa - 1.1.2007, 20:58


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
TwisT_X
Дата 1.1.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



SoWa, так нет.. в одной строке несколько чисел.. тогда не пройдет этот код..


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
SoWa
Дата 1.1.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 3
Всего: 74



Ох. В каждой строке несколько цифр. Так? Без пробелов?
Чем же не пройдет? Я же read использую, я не readln
Как известно, read считывает один символ.
Приведи пример файла?


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
TwisT_X
Дата 1.1.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



138431 03464 161 3217 1321675 4654 897
64 498 5474 486 54 4698 534 46654647
32164 65432064679 3167944 46494554 47


ну вот так вот приверно!


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
SoWa
Дата 1.1.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 3
Всего: 74



Ага. Приехали smile
Код

var 
f: text;
i,j: integer;
s,k: string;
mas: array[1..500] of string;
begin
Ля-ля-ля, сам знаешь
j:=0;
s:=''; k:='';
while not (eof ( f ) ) do
begin
readln(f,s);
for i:=1 to length(s) do
 begin
  if s[i]<>' ' then k:=k+s[i] else begin j:=j+1; mas[j]:=k; k:=''; end;
 end;
end;
end;

ИМХО лучше. Нету возможности проверить, ибо свежая винда еще без софта.
отрываешь народ от праздника =)

Это сообщение отредактировал(а) SoWa - 1.1.2007, 21:46


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
TwisT_X
Дата 1.1.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



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



--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
SoWa
Дата 1.1.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 3
Всего: 74



Так. Во первых Я - не она. Я - ОН.
Во вторых. Ошибка у меня. Файл не прикрыл в конце. close(f);
Раз ничего не пишет, ошибка тут:
Код

for i:=1 to length(s) do
 begin
  if s[i]<>' ' then k:=k+s[i] else begin j:=j+1; mas[j]:=k; k:=''; end;
 end;

Хотя ошибок не вижу..
А вообще меня смущает функция eof.
Может из-за нее. Попробуй заменить ее на функцию поиска количества строк, и иди циклом по строкам. Может сканает. И еще попробуй трассировкой прогнать, погляди где чего.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
TwisT_X
Дата 1.1.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



Извени что перепутал (он).  smile
я уже множество программ таких переделал.. и проблема помоему в том что тут дабавлены массивы..
если не они то все работает.. поэтому я собственно и обратился в "центр помощи". с функцией "еоф" всен намано.. короче тут какая то лажа.. может кто то другой подскажет?


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
SoWa
Дата 1.1.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 3
Всего: 74



Вот. Стабильно работает!

Код

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
f: text;
i,j: integer;
s,k: string;
mas: array[1..500] of string;

begin
assignfile(f,'f:\test.txt');
reset(f);

j:=0;
s:=''; k:='';
 while not (eof ( f ) ) do
  begin
  readln(f,s);
   for i:=1 to length(s)+1 do
    begin
     if (s[i]=' ')or(i=length(s)+1) then
     begin
           j:=j+1;
           mas[j]:=k;
           k:='';
    end
        else
           k:=k+s[i]
    end;
 end;
closefile(f);
writeln('kol-vo',j);
writeln('massiv');
for i:=1 to j do
 writeln(mas[i]);
readln;
end.



--------------------
Всем добра smile
PM MAIL ICQ   Вверх
TwisT_X
Дата 1.1.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



SoWa, а зачем писать вот это:
or(i=length(s)+1) ?



--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
apook
Дата 2.1.2007, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Вот мой аналог на С переводить ненкогда

Код

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "ctype.h"

struct m
{
int *val;
int width;
};


long *fcalc( FILE *f )
{
char ch;
long i, j, c, *rtn;
fseek( f, 0, SEEK_SET );

for( i=0, j=0, c=0; ; i++ )
{
    ch =fgetc( f );
    if( ch =='\n' || ch ==EOF || ch =='\0' )
    {
        if( i >c ) c =i;
        if( ch==EOF && i==0 ) break;
        j++;
        i=0;
        }
    if( ch==EOF ) break;
    }

rtn[0]=j; /*количество строк */
rtn[1]=c; /*длина самой длинной строки*/
return rtn;
}



void main()
{
int i=0, j=0, c=0, q=0;
char  ch;

long *x=( long * ) malloc ( 2 ); 

FILE *f;
struct m matrix;


if( (f =(fopen( "Data.$$$", "r" ))) !=NULL );
else
{
    perror( "Error reading \n");
    exit(1);
    }

x[0]=0;
x[1]=0;
x =fcalc( f );


if( x[0] ==0 )
{
    printf( "File Length of zero: %s", "Data.$$$" );
    exit(1);
    }

fseek( f, 0, SEEK_SET );
for( i=0, j=0; i <x[0]; )
{
    ch =fgetc( f );
    if( ch =='\n' || ch ==EOF || ch =='\0' )
    {
        if( ch==EOF && i==0 ) break;
        i++;
        }
    else if( isdigit(ch) ) j++;
    if( ch==EOF ) break;
    }

matrix.width =j;
matrix.val =new int[matrix.width];
 
fseek( f, 0, SEEK_SET );

for( i=0, j=0; i <x[0]; )
{
    ch =fgetc( f );
    if( ch =='\n' || ch ==EOF || ch =='\0' )
    {
        if( ch==EOF && i==0 ) break;
        i++;
        }
    else if( isdigit(ch) )
    {
        matrix.val[j] =ch-48;
        j++;
        }
    if( ch==EOF ) break;
    }

matrix.val[j]='\0';




    for( i=0; i <matrix.width; i++ )
        printf( "%d", matrix.val[i] );


    free( matrix.val );

fclose( f );


return;
}

Можешь по......ться с утилитой специальной утилитой 

Это сообщение отредактировал(а) apook - 2.1.2007, 01:31

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  c2p32.7z 53,63 Kb


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
SoWa
Дата 2.1.2007, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 3
Всего: 74



Цитата(TwisT_X @  1.1.2007,  23:07 Найти цитируемый пост)
SoWa, а зачем писать вот это:or(i=length(s)+1) ?

Как зачем?! Иначе последний символ в строке выпускается.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
TwisT_X
Дата 2.1.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



SoWa, я проверил как прога работает.. есть одно "но": последние число в строке и первое чилсо в следующей строке она считает как одно число.. Еще пока не придумал как рассоединить smile 


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.