Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

fgetsRewrite.ino 2.4KB

pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 8 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. // Demo of rewriting a line read by fgets
  2. #include <SPI.h>
  3. #include "SdFat.h"
  4. // SD card chip select pin
  5. const uint8_t chipSelect = SS;
  6. // file system
  7. SdFat sd;
  8. // print stream
  9. ArduinoOutStream cout(Serial);
  10. //------------------------------------------------------------------------------
  11. // store error strings in flash memory
  12. #define error(s) sd.errorHalt(F(s))
  13. //------------------------------------------------------------------------------
  14. void demoFgets() {
  15. char line[25];
  16. int c;
  17. uint32_t pos;
  18. // open test file
  19. SdFile rdfile("fgets.txt", O_RDWR);
  20. // check for open error
  21. if (!rdfile.isOpen()) {
  22. error("demoFgets");
  23. }
  24. // list file
  25. cout << F("-----Before Rewrite\r\n");
  26. while ((c = rdfile.read()) >= 0) {
  27. Serial.write(c);
  28. }
  29. rdfile.rewind();
  30. // read lines from the file to get position
  31. while (1) {
  32. pos = rdfile.curPosition();
  33. if (rdfile.fgets(line, sizeof(line)) < 0) {
  34. error("Line not found");
  35. }
  36. // find line that contains "Line C"
  37. if (strstr(line, "Line C")) {
  38. break;
  39. }
  40. }
  41. // rewrite line with 'C'
  42. if (!rdfile.seekSet(pos)) {
  43. error("seekSet");
  44. }
  45. rdfile.println("Line R");
  46. rdfile.rewind();
  47. // list file
  48. cout << F("\r\n-----After Rewrite\r\n");
  49. while ((c = rdfile.read()) >= 0) {
  50. Serial.write(c);
  51. }
  52. // close so rewrite is not lost
  53. rdfile.close();
  54. }
  55. //------------------------------------------------------------------------------
  56. void makeTestFile() {
  57. // create or open test file
  58. SdFile wrfile("fgets.txt", O_WRITE | O_CREAT | O_TRUNC);
  59. // check for open error
  60. if (!wrfile.isOpen()) {
  61. error("MakeTestFile");
  62. }
  63. // write test file
  64. wrfile.print(F(
  65. "Line A\r\n"
  66. "Line B\r\n"
  67. "Line C\r\n"
  68. "Line D\r\n"
  69. "Line E\r\n"
  70. ));
  71. wrfile.close();
  72. }
  73. //------------------------------------------------------------------------------
  74. void setup() {
  75. Serial.begin(9600);
  76. // Wait for USB Serial
  77. while (!Serial) {
  78. SysCall::yield();
  79. }
  80. cout << F("Type any character to start\n");
  81. while (!Serial.available()) {
  82. SysCall::yield();
  83. }
  84. // Initialize at the highest speed supported by the board that is
  85. // not over 50 MHz. Try a lower speed if SPI errors occur.
  86. if (!sd.begin(chipSelect, SD_SCK_MHZ(50))) {
  87. sd.initErrorHalt();
  88. }
  89. makeTestFile();
  90. demoFgets();
  91. cout << F("\nDone\n");
  92. }
  93. void loop() {}