Continuamos con esta serie con comenzó en MIC031S y MIC032S presentando nuevas prácticas y ejemplos para trabajar con textos en Arduino uno. Esta es la última parte de esta serie.

  

REMPLAZAR UN STRIGN DENTRO DE OTRO STRING.

Para remplazar un string por otro, podemos usar la función: string.replace(substring1, substring2). El parámetro substring1 es la string a buscar y el parámetro substring2, es el string de remplazo. La función reemplazara todas las coincidencias que encuentre de valor contenido en el parámetro substring1.

En el siguiente programa usamos estas funciones y él puede ser encontrado en el menú: Archivo->Ejemplos->Strings->StringReplace. El diagrama de flujo puede ser observado en la Figura 14.

 

 

Figura 14. Diagrama de Flujo  para remplazar strings
Figura 14. Diagrama de Flujo para remplazar strings

 

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
   }

   // send an intro:
   Serial.println("\n\nString replace:\n");
   Serial.println();

}


void loop() {
   String stringOne = "";
   Serial.println(stringOne);
   // replace() changes all instances of one substring with another:
   // first, make a copy of the original string:
   String stringTwo = stringOne;
   // then perform the replacements:
   stringTwo.replace("<", "
   // print the original:
   Serial.println("Original string: " + stringOne);
   // and print the modified string:
   Serial.println("Modified string: " + stringTwo);
   // you can also use replace() on single characters:
   String normalString = "bookkeeper";
   Serial.println("normal: " + normalString);
   String leetString = normalString;
   leetString.replace('o', '0');
   leetString.replace('e', '3');
   Serial.println("l33tspeak: " + leetString);
    
   // do nothing while true:
   while (true);
   }

 

VERIFICAR SI UNA STRIGN ARRANCA CON (startWith) O FINALIZA CON (endsWith).

Para verificar si una string comienza con un determinado string podemos usar la función: string.startsWith(string2). Si la string comienza con el valor contenido en el parámetro string2, la función retorna verdadero (true), de lo contrario retorna falso (false). También podemos verificar si termina con un determinado string. Para esto podemos usar la función: string.endsWith(string2).

Si la string finaliza con el valor contenido en el parámetro string2, la función retorna verdadero (true), de lo contrario retorna falso (false). El siguiente programa hace uso de estas funciones y él puede ser encontrado en el menú: Archivo->Ejemplos->Strings->StringsStartsWithEndsWith.

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
   }

   // send an intro:
   Serial.println("\n\nString startsWith() and endsWith():");
   Serial.println();

}

void loop() {

   // startsWith() checks to see if a String starts with a particular substring:
   String stringOne = "HTTP/1.1 200 OK";
   Serial.println(stringOne);
   if (stringOne.startsWith("HTTP/1.1")) {
      Serial.println("Server's using http version 1.1");
   }
 
   // you can also look for startsWith() at an offset position in the string:
   stringOne = "HTTP/1.1 200 OK";
   if (stringOne.startsWith("200 OK", 9)) {
      Serial.println("Got an OK from the server");
   }

   // endsWith() checks to see if a String ends with a particular character:
   String sensorReading = "sensor = ";
   sensorReading += analogRead(A0);
   Serial.print(sensorReading);
   if (sensorReading.endsWith("0")) {
      Serial.println(". This reading is divisible by ten");
   } else {
      Serial.println(". This reading is not divisible by ten");
   }

   // do nothing while true:
   while (true);

}

 

COMO CONSEGUIR UN SUBSTRING DE UNA STRING.

Para conseguir una substring desde una string podemos usar la función: string.substring(from). El parámetro 'from' recibe el índex desde donde conseguir la substring. La función retorna la substring. La anterior función retorna la substring encontrada desde el índex hasta el final de la string.

Si queremos conseguir una substring pero con un determinado tamaño, entonces podemos usar la función: string.substring(from, to). Las anteriores funciones retornar el substring incluyendo el carácter encontrado en el índex. El siguiente programa hace uso de estas funciones y él puede ser encontrado en le menú: Archivo->Ejemplos->Strings->StringSubString. El diagrama de flujo puede ser observado en la Figura 15.

 

Figura 15 Diagrama de Flujo  para buscar substrings
Figura 15 Diagrama de Flujo para buscar substrings

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
   }

   // send an intro:
   Serial.println("\n\nString substring():");
   Serial.println();

}


void loop() {

   // Set up a String:
   String stringOne = "Content-Type: text/html";
   Serial.println(stringOne);

   // substring(index) looks for the substring from the index position to the end:
   if (stringOne.substring(19) == "html") {
      Serial.println("It's an html file");
   }

   // you can also look for a substring in the middle of a string:
   if (stringOne.substring(14, 18) == "text") {
      Serial.println("It's a text-based file");
   }

   // do nothing while true:
   while (true);

}

 

 

CONVERTIR UN STRING EN UN VALOR NUMERICO ENTERO (TO INT).

Para convertir un string en un valor entero podemos usar la función: string.toInt(). La función retorna un tipo de dato long que es un entero. Caso la string no comienza con un digito, la función retorna un cero (‘0’). El siguiente programa lee el puerto serial hasta que sea presionada la tecla enter y convierte los caracteres a un numero si los caracteres son dígitos. El programa puede ser encontrado en el menú: Archivo->Ejemplos->Strings->StringToInt.

String inString = ""; // string to hold input

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
   }

   // send an intro:
   Serial.println("\n\nString toInt():");
   Serial.println();

}

 

void loop() {

   // Read serial input:
   while (Serial.available() > 0) {
      int inChar = Serial.read();
      if (isDigit(inChar)) {
         // convert the incoming byte to a char and add it to the string:
         inString += (char)inChar;
      }

      // if you get a newline, print the string, then the string's value:
      if (inChar == '\n') {
         Serial.print("Value:");
         Serial.println(inString.toInt());
         Serial.print("String: ");
         Serial.println(inString);
         // clear the string for new input:
         inString = "";
      }

   }

}

 

ANALISIS DE CARACTERES.

La librería de Arduino posee instrucciones específicas para hacer análisis de caracteres. Esto es muy útil cuando recibimos información de texto y queremos saber sobre su formato o composición. La siguiente es una lista de las funciones disponibles para análisis de caracteres:

 

isAlphaNumeric(thisChar)

Descripción: Analiza si un carácter es alfanumérico.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isAlpha(thisChar)

Descripción: Analiza si el carácter es alfabético.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isAscii(thisChar)

Descripción: Analiza si el carácter es ASCII.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isWhitespace(thisChar)

Descripción: Analiza si el carácter es espacio en blanco.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isControl(thisChar)

Descripción: Analiza si es carácter de control.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isDigit(thisChar)

Descripción: Analiza si el carácter es un digito.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isGraph(thisChar)

Descripción: Analiza el carácter es gráfico.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isLowerCase(thisChar)

Descripción: Analiza si el carácter es minúsculo (lower case).

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isPrintable(thisChar)

Descripción: Analiza si el carácter se puede imprimir.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isPunct(thisChar)

Descripción: Analiza si el carácter es signo de puntuación.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isSpace(thisChar)

Descripción: Analiza si es el carácter de espacio.

Parámetros: thisChar: El caracter a ser analizado.

Retorno: Verdadero o falso.

 

isUpperCase(thisChar)

Descripción: Analiza si el carácter es mayúsculo (upper case).

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isHexadecimalDigit(thisChar)

Descripción: Analiza si es un carácter digito hexadecimal.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

El siguiente programa analiza cualquier carácter recibido por el puerto serie e indica al usuario la clase de caracter. El programa puede ser encontrado en el menú: Archivo->Ejemplos->Strings->CharacterAnalysis.

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
     ; // wait for serial port to connect. Needed for native USB port only

   }
 
   // send an intro:
   Serial.println("send any byte and I'll tell you everything I can about it");
   Serial.println();

}


void loop() {
   // get any incoming bytes:
   if (Serial.available() > 0) {
      int thisChar = Serial.read();
      // say what was sent:
      Serial.print("You sent me: \'");
      Serial.write(thisChar);
      Serial.print("\' ASCII Value: ");
      Serial.println(thisChar);
 
      // analyze what was sent:
      if (isAlphaNumeric(thisChar)) {
          Serial.println("it's alphanumeric");
      }

      if (isAlpha(thisChar)) {
          Serial.println("it's alphabetic");
      }

      if (isAscii(thisChar)) {
         Serial.println("it's ASCII");
      }

      if (isWhitespace(thisChar)) {
         Serial.println("it's whitespace");
      }

      if (isControl(thisChar)) {
         Serial.println("it's a control character");
      }

      if (isDigit(thisChar)) {
         Serial.println("it's a numeric digit");
      }

      if (isGraph(thisChar)) {
         Serial.println("it's a printable character that's not whitespace");
      }

      if (isLowerCase(thisChar)) {
         Serial.println("it's lower case");
      }

      if (isPrintable(thisChar)) {
         Serial.println("it's printable");
      }

      if (isPunct(thisChar)) {
         Serial.println("it's punctuation"); 
      }

      if (isSpace(thisChar)) {
         Serial.println("it's a space character");
      }

      if (isUpperCase(thisChar)) {
         Serial.println("it's upper case");
      }

      if (isHexadecimalDigit(thisChar)) {
         Serial.println("it's a valid hexadecimaldigit (i.e. 0 - 9, a - F, or A - F)");
      }

     // add some space and ask for another byte:
     Serial.println();
     Serial.println("Give me another byte:");
     Serial.println();
   }
}
19.138MBMemory Usage46.44msRequest Duration
Joomla! Version5.2.3
PHP Version8.3.16
Identityguest
Response200
Templatecassiopeia
Database
Server
mysql
Version
10.5.22-MariaDB
Collation
latin1_swedish_ci
Conn Collation
utf8mb4_general_ci
$_GET
[]
$_POST
[]
$_SESSION
array:1 [ "joomla" => "***redacted***" ]
$_COOKIE
[]
$_SERVER
array:51 [ "USER" => "apache" "HOME" => "/usr/share/httpd" "SCRIPT_NAME" => "/index.php" "RE...
session
array:3 [ "counter" => 1 "timer" => array:3 [ "start" => 1741914667 "last" => 1741914667...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
  • afterLoad (85.86KB) (262μs)
  • afterInitialise (1.14MB) (3.63ms)
  • afterRoute (179.16KB) (884μs)
  • beforeRenderComponent com_content (100.65KB) (373μs)
  • Before Access::preloadComponents (all components) (33.5KB) (201μs)
  • After Access::preloadComponents (all components) (107.06KB) (457μs)
  • Before Access::preloadPermissions (com_content) (1.57KB) (8μs)
  • After Access::preloadPermissions (com_content) (16.19MB) (21.9ms)
  • Before Access::getAssetRules (id:8 name:com_content) (480.16KB) (1.88ms)
  • After Access::getAssetRules (id:8 name:com_content) (7.36KB) (39μs)
  • afterRenderComponent com_content (503.63KB) (7.8ms)
  • afterDispatch (2.25KB) (79μs)
  • beforeRenderRawModule mod_articles_category (Banco de Circuitos) (423.33KB) (2.07ms)
  • afterRenderRawModule mod_articles_category (Banco de Circuitos) (15.43KB) (441μs)
  • beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (112μs)
  • afterRenderRawModule mod_finder (Busca_inteligente) (63.1KB) (1.21ms)
  • beforeRenderModule mod_articles_category (Banco de Circuitos) (9.98KB) (570μs)
  • afterRenderModule mod_articles_category (Banco de Circuitos) (5.39KB) (83μs)
  • beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (217μs)
  • afterRenderModule mod_finder (Busca_inteligente) (4.44KB) (51μs)
  • afterRender (336.48KB) (4.04ms)
  • 1 x After Access::preloadPermissions (com_content) (16.19MB) (47.17%)
    21.90ms
    1 x afterRenderComponent com_content (503.63KB) (16.8%)
    7.80ms
    1 x afterRender (336.48KB) (8.7%)
    4.04ms
    1 x afterInitialise (1.14MB) (7.82%)
    3.63ms
    1 x beforeRenderRawModule mod_articles_category (Banco de Circuitos) (423.33KB) (4.46%)
    2.07ms
    1 x Before Access::getAssetRules (id:8 name:com_content) (480.16KB) (4.04%)
    1.88ms
    1 x afterRenderRawModule mod_finder (Busca_inteligente) (63.1KB) (2.6%)
    1.21ms
    1 x afterRoute (179.16KB) (1.9%)
    884μs
    1 x beforeRenderModule mod_articles_category (Banco de Circuitos) (9.98KB) (1.23%)
    570μs
    1 x After Access::preloadComponents (all components) (107.06KB) (0.98%)
    457μs
    1 x afterRenderRawModule mod_articles_category (Banco de Circuitos) (15.43KB) (0.95%)
    441μs
    1 x beforeRenderComponent com_content (100.65KB) (0.8%)
    373μs
    1 x afterLoad (85.86KB) (0.56%)
    262μs
    1 x beforeRenderModule mod_finder (Busca_inteligente) (6.39KB) (0.47%)
    217μs
    1 x Before Access::preloadComponents (all components) (33.5KB) (0.43%)
    201μs
    1 x beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (0.24%)
    112μs
    1 x afterRenderModule mod_articles_category (Banco de Circuitos) (5.39KB) (0.18%)
    83μs
    1 x afterDispatch (2.25KB) (0.17%)
    79μs
    1 x afterRenderModule mod_finder (Busca_inteligente) (4.44KB) (0.11%)
    51μs
    1 x After Access::getAssetRules (id:8 name:com_content) (7.36KB) (0.08%)
    39μs
    1 x Before Access::preloadPermissions (com_content) (1.57KB) (0.02%)
    8μs
23 statements were executed, 5 of which were duplicates, 18 unique11.95ms1.65MB
  • SELECT @@SESSION.sql_mode;29μs968B/libraries/src/Session/MetadataManager.php:184Copy
  • SELECT `session_id` FROM `incbmx_session` WHERE `session_id` = :session_id LIMIT 165μs1.3KBParams/libraries/src/Session/MetadataManager.php:187Copy
  • INSERT INTO `incbmx_session` (`session_id`,`guest`,`time`,`userid`,`username`,`client_id`) VALUES (:session_id, :guest, :time, :user_id, :username, :client_id)144μs944BParams/libraries/src/Session/MetadataManager.php:260Copy
  • SELECT `id`,`rules` FROM `incbmx_viewlevels`49μs656B/libraries/src/Access/Access.php:955Copy
  • SELECT `b`.`id` FROM `incbmx_usergroups` AS `a` LEFT JOIN `incbmx_usergroups` AS `b` ON `b`.`lft` <= `a`.`lft` AND `b`.`rgt` >= `a`.`rgt` WHERE `a`.`id` = :guest84μs1.64KBParams/libraries/src/Access/Access.php:868Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`236μs20.2KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` IN (:preparedArray1,:preparedArray2,:preparedArray3,:preparedArray4,:preparedArray5,:preparedArray6,:preparedArray7,:preparedArray8,:preparedArray9,:preparedArray10,:preparedArray11,:preparedArray12,:preparedArray13,:preparedArray14,:preparedArray15,:preparedArray16,:preparedArray17,:preparedArray18,:preparedArray19,:preparedArray20,:preparedArray21,:preparedArray22,:preparedArray23,:preparedArray24,:preparedArray25,:preparedArray26,:preparedArray27,:preparedArray28,:preparedArray29,:preparedArray30,:preparedArray31,:preparedArray32,:preparedArray33,:preparedArray34,:preparedArray35,:preparedArray36,:preparedArray37,:preparedArray38,:preparedArray39)302μs7.44KBParams/libraries/src/Access/Access.php:357Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` LIKE :asset OR `name` = :extension OR `parent_id` = 07.89ms1.46MBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `incbmx_assets`330μs2.02KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • SELECT * FROM `incbmx_assets` WHERE `name` = 'com_content.article.2543'100μs912B/libraries/src/Table/Table.php:780Copy
  • SHOW FULL COLUMNS FROM `incbmx_content`276μs1.77KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • UPDATE `incbmx_content` SET `hits` = (`hits` + 1) WHERE `id` = '2543'229μs48B/libraries/src/Table/Table.php:1348Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)276μs62.13KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`231μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `m`.`tag_id`,`t`.* FROM `incbmx_contentitem_tag_map` AS `m` INNER JOIN `incbmx_tags` AS `t` ON `m`.`tag_id` = `t`.`id` WHERE `m`.`type_alias` = :contentType AND `m`.`content_item_id` = :id AND `t`.`published` = 1 AND `t`.`access` IN (:preparedArray1,:preparedArray2)259μs3.97KBParams/libraries/src/Helper/TagsHelper.php:388Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`216μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT DISTINCT a.id, a.title, a.name, a.checked_out, a.checked_out_time, a.note, a.state, a.access, a.created_time, a.created_user_id, a.ordering, a.language, a.fieldparams, a.params, a.type, a.default_value, a.context, a.group_id, a.label, a.description, a.required, a.only_use_in_subform,l.title AS language_title, l.image AS language_image,uc.name AS editor,ag.title AS access_level,ua.name AS author_name,g.title AS group_title, g.access as group_access, g.state AS group_state, g.note as group_note FROM incbmx_fields AS a LEFT JOIN `incbmx_languages` AS l ON l.lang_code = a.language LEFT JOIN incbmx_users AS uc ON uc.id=a.checked_out LEFT JOIN incbmx_viewlevels AS ag ON ag.id = a.access LEFT JOIN incbmx_users AS ua ON ua.id = a.created_user_id LEFT JOIN incbmx_fields_groups AS g ON g.id = a.group_id LEFT JOIN `incbmx_fields_categories` AS fc ON fc.field_id = a.id WHERE ( (`a`.`context` = :context AND (`fc`.`category_id` IS NULL OR `fc`.`category_id` IN (:preparedArray1,:preparedArray2,:preparedArray3)) AND `a`.`access` IN (:preparedArray4,:preparedArray5)) AND (`a`.`group_id` = 0 OR `g`.`access` IN (:preparedArray6,:preparedArray7)) AND `a`.`state` = :state) AND (`a`.`group_id` = 0 OR `g`.`state` = :gstate) AND `a`.`only_use_in_subform` = :only_use_in_subform ORDER BY a.ordering ASC449μs6.06KBParams/libraries/src/MVC/Model/BaseDatabaseModel.php:164Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`254μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `name`,`element` FROM `incbmx_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1150μs656B/administrator/components/com_finder/src/Helper/LanguageHelper.php:135Copy
  • SELECT `title` FROM `incbmx_finder_taxonomy` WHERE `parent_id` = 1 AND `state` = 1 AND `access` IN (1,5)82μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `incbmx_schemaorg` WHERE `itemId` = :itemId AND `context` = :context59μs1.55KBParams/plugins/system/schemaorg/src/Extension/Schemaorg.php:403Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)168μs62.17KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT SUM(CASE WHEN `a`.`next_execution` <= :now THEN 1 ELSE 0 END) AS due_count,SUM(CASE WHEN `a`.`locked` IS NULL THEN 0 ELSE 1 END) AS locked_count FROM `incbmx_scheduler_tasks` AS `a` WHERE `a`.`state` = 173μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:465Copy
  • warningassets - No asset found for com_content.article.2543, falling back to com_content
  • warningassets - No asset found for com_content.article.2543, falling back to com_content
  • warningassets - No asset found for com_content.article.2543, falling back to com_content
  • warningassets - No asset found for com_content.article.2543, falling back to com_content
  • warningassets - No asset found for com_content.article.2543, falling back to com_content
  • warningassets - No asset found for com_content.article.2543, falling back to com_content
  • warningassets - No asset found for com_content.article.2543, falling back to com_content
  • warningassets - No asset found for com_content.article.2543, falling back to com_content
  • warningassets - No asset found for com_content.article.2543, falling back to com_content
  • warningassets - No asset found for com_content.article.2543, falling back to com_content