13주차_참고 : dataTime 태그에서 측정 일시 추출 - dhryu60/SmartDevice_2025-1 GitHub Wiki


📌 코드 블록

i = line.indexOf("</dataTime>");
if (i > 0) {
  tmp_str = "<dataTime>";
  dateNtime = line.substring(line.indexOf(tmp_str) + tmp_str.length(), i);
  Serial.println(dateNtime);
}

🔍 1️⃣ 목적

  • 이 코드는 HTTP 응답의 한 줄(line)에서 <dataTime> 태그로 감싸진 데이터(예: 측정일시)를 추출하기 위해 작성되었다.
  • <dataTime>2025-05-30 14:00</dataTime> 형태의 문자열 중에서 2025-05-30 14:00 부분을 추출한다.

🔎 2️⃣ 각 줄의 동작

🟢 i = line.indexOf("</dataTime>");

  • line 문자열에서 "</dataTime>"이라는 서브스트링(문자열 조각)을 찾아, 그 시작 인덱스(첫 글자 위치)를 반환한다.
  • 찾지 못하면 -1을 반환.
  • 찾았다면 i</dataTime>의 첫 글자의 위치(즉, 끝태그의 시작 위치).

🟢 if (i > 0) {

  • "</dataTime>"가 발견된 경우에만 아래 코드를 실행하도록 조건을 설정.
  • 찾지 못하면 (i == -1) 블록을 건너뜀.

🟢 tmp_str = "<dataTime>";

  • 추출할 시작 태그를 문자열 변수 tmp_str에 저장.

🟢 dateNtime = line.substring(line.indexOf(tmp_str) + tmp_str.length(), i);

  • line.indexOf(tmp_str) : "<dataTime>"의 시작 위치를 찾음.
  • + tmp_str.length() : "<dataTime>"의 끝 위치 바로 다음부터 문자열 추출 시작.
  • i : "</dataTime>"의 시작 위치까지 추출.
  • 결과적으로 <dataTime></dataTime> 사이의 문자열(즉, 날짜/시간 데이터)만 추출하여 dateNtime에 저장.

🟢 Serial.println(dateNtime);

  • 추출된 문자열(dateNtime)을 시리얼 모니터에 출력.
  • 예: 2025-05-30 14:00

🔎 3️⃣ 예시

  • line 문자열: "<dataTime>2025-05-30 14:00</dataTime>"
  • i = line.indexOf("</dataTime>")31 (끝태그 시작 위치)
  • line.indexOf("<dataTime>")0
  • tmp_str.length()10
  • dateNtime = line.substring(0 + 10, 31)"2025-05-30 14:00"

💡 4️⃣ 정리

이 코드는 한 줄의 응답 문자열(line)에서:

  • 특정 태그(dataTime)로 둘러싸인 데이터를 찾아내어
  • 해당 데이터만 깔끔하게 잘라내어(substring())
  • 추출된 데이터를 시리얼 모니터에 출력하도록 한다.

⚠️ **GitHub.com Fallback** ⚠️