BG Development


Страници: (2) 1 [2]   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Отделяне на данни от текстови файл, Възможно най-компактен C код
fast_user
Публикувано на: 01-06-2022, 22:43
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 607
Регистриран на: 19.09.12



CODE

int main()
{
      char buf[] = "00000        EEEE         dgsdg           dfgdg\r\n"
                     "00014        aF45B9     RTRT            JOLDF\r\n"
                       "00036        EC5EFFFF   ERR             87YYHGGG\r\n"
                       "00002        FE             f\r\n";

      char* line = buf;
      char* end = buf;
      do
      {
            if ('\r' == *end && '\n' == *(end + 1))//line found
            {
                  end += 2;
                  for (int i = 2; i <= 8; i += 2)
                  {
                        if (line[13 + i] == ' ')
                        {
                              for (int z = 0; z < i; z += 2)
                              {
                                    char code[3];
                                    strncpy(code, &line[13 + z], 2 * sizeof(char));
                                    code[2] = 0;
                                    printf("%s\r\n", code);//пази 2 символните кодове както решиш
                              }
                              break;
                        }
                  }
                  line = end;
            }
            end++;
            
      } while (*end);

      int x = 0;
      scanf("%d", x);
}


--------------------
Linux is only free if your time has no value.
Linux Akbar
Чък Норис не използва Линукс, Линукс използва Чък Норис.
PMEmail Poster
Top
avsrm
Публикувано на: 01-06-2022, 23:19
Quote Post



Име: Но
Група: Потребител
Ранг: Посетител

Мнения: 115
Регистриран на: 21.01.08



По принцип като се замисли човек, текстовия файл е правен от компютъра, и се оказа че няма какво да извличам и подреждам ... всичко си е подредено, само трябваше да го взема.
Реших за сега проблема така ... малко извратено е но толкова мога.
CODE




struct {
                   char number_data_row[5];   // може да ми потрябва за проверка.
                   char pause1[8];                   // винаги има 8 паузи
                   char my_precious_data[8];  // 8 баита са максимално данни на ред
                   char pause2[4];                  // останалите паузи са от 4 до 8
                   char schrott[21];                // това не ми трябва
                   char cr_lf[2];                      // каретката и ЛФ-а за проверка.
                    } Extracted_data; //[48]    // всеки ред с цр и лф-а са по точно 48 байта

pch=strstr(data_string,"00000");
memcpy(&Extracted_data,pch,48);

for(i=0;i<8;i++) Визуализация("My_precious_Data=["+IntToStr(i)+"]="+IntToStr(Extracted_data.my_precious_data[i])); // само за проба. сега имам
                                                                                                    // неохбодимите данни с
                                                                                                     //малко паузи ... ще чистя.












Поздрави и благодарности.

Това мнение е било редактирано от avsrm на 01-06-2022, 23:19


--------------------
Знам само малко от Borland Builder C++ 6.
PMEmail PosterUsers Website
Top
Bender++
Публикувано на: 02-06-2022, 08:40
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 608
Регистриран на: 18.04.21



QUOTE
if ('\r' == *end && '\n' == *(end + 1))


Еретик! На кладата! Ако редовете завършват само на
CODE
\n
както правят нормалните редактори и ОСи ?

Това мнение е било редактирано от Bender++ на 02-06-2022, 08:41


--------------------
Слава на Цар Путин! Долу украинските фашисти!
PMEmail Poster
Top
fast_user
Публикувано на: 02-06-2022, 09:26
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 607
Регистриран на: 19.09.12



QUOTE (avsrm @ 31-05-2022, 19:19)
... всеки ред завършва с каретка и LF....

Чети заданието.
Линукс Акбар.


--------------------
Linux is only free if your time has no value.
Linux Akbar
Чък Норис не използва Линукс, Линукс използва Чък Норис.
PMEmail Poster
Top
DarkOne
Публикувано на: 04-06-2022, 06:21
Quote Post


Group Icon
Име: Александър Петков
Група: Администратор
Ранг: Почетен член

Мнения: 3733
Регистриран на: 30.01.04



QUOTE (Дон Реба @ 01-06-2022, 07:49)
цин и цоут изобщо не ги дискутирам, те стават само за курсови работи .

То тая задача е баш като упражнение (дори няма сложността за курсова работа).
CODE
int main()
{
      ifstream f("data.txt");

      string precious;
      int n;

      while (!f.eof())
      {
            f >> n;
            if (f.good()) // прочели сме числото
            {
                  f >> precious;

                  if (f)
                        cout << precious << endl;

                 // остатъкът от реда не ни интересува
                  f.ignore(std::numeric_limits<int>::max(), '\n');
            }
            else // игнорираме линии, които не започват с число
            {
                  f.clear();
                  f.ignore(std::numeric_limits<int>::max(), '\n');
            }
      }

      std::cin.get();

      return 0;
}


QUOTE (data.txt)
LKWHJERTLHKEVMLEHJ;JKNSN LG
DTH54634757567567567
THDRJTYIKFTKJFJXFDNXFGJHTJ
FGHFJDTYJTYJKTYJK
00000        EEEE         dgsdg           dfgdg
00002        FE             f             
00003        CD            f             
00004        FEFE         fgdfg            dfgfg675
00006        91            rt                 hhj
00007        45            5678            hjmnjhm
00008        9B            34we            89789
00009        45            54564           87989
00010        a5            254536         8987
00011        45            DFDF            uiyE
00014        aF45B9     RTRT            JOLDF
00015        45            3456            TY65555
00018        225357     7890            FGHFGH
00030        FF              2             
00031        FF              2             
00032        FF              2             
00036        EC5EFFFF   ERR             87YYHGGG

QUOTE (Output)
EEEE
FE
CD
FEFE
91
45
9B
45
a5
45
aF45B9
45
225357
FF
FF
FF
EC5EFFFF


Това мнение е било редактирано от DarkOne на 04-06-2022, 06:28


--------------------
The man who learns only what others know
is as ignorant as if he learns nothing.
The treasures of knowledge are the most rare,
and guarded most harshly.
-- Chronicle of the First Age
PMICQ
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) 1 [2]  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0