저는 현재 매일 책의 일부를 자동으로 트윗하는 작은 앱을 만들고 있습니다.
내 책은 텍스트 파일 안에 있으므로이 텍스트 파일의 내용을 140 자 길이의 문자열 배열로 나누고 싶습니다.
split ()과 같은 함수를 사용하고 싶었지만 지금은 좋은 결과를 얻지 못하고 있습니다.
그건 그렇고, 만들려는 문자열 사이에 특정 구분 기호가 없습니다.
텍스트 파일 내의 문자 수를 세고 한계 (즉, 분할 수)를 정의하여 140 개의 문자열을 가질 수 있다고 생각했지만 더 직관적 인 기능이 있어야한다고 생각합니다.
어떤 생각?
다음은 텍스트 형식으로 책에 연결되는 실제 코드 인 test.txt입니다.
var fs = require('fs');
var array = fs.readFileSync('./test.txt').toString().match("{1,140}");
for(i in array) {
console.log(array[i]);
}
귀하의 답변 덕분에 새 코드가 있습니다. 콘솔에서 이상한 숫자를 반환합니다.
var fs = require('fs');
var book = fs.readFileSync('./test.txt');
var lastSplit; // position of the last split that you will cache
var limit = book.length > 140 ? 140 : book.length - lastSplit;
var urlsToAdd = book.slice(lastSplit, lastSplit + limit);
for(i in book) {
console.log(book[i]);
}
감사합니다
각각 140 개의 문자로 구성된 n 개의 분할에서 한 번에 전체 책을 분할하는 대신 수행 할 수있는 것은 이전에 수행 된 총 분할 수인 마지막 분할의 마지막 위치를 기억하는 것입니다.
var lastSplit; // position of the last split that you will cache
var limit = book.length - lastSplit > 140 ? 140 : book.length - lastSplit;
var urlsToAdd = book.slice(lastSplit, lastSplit + limit);
lastSplit
윌은 마지막 스플릿의 위치를 유지하고 또한 얼마나 많은 캐릭터가 트윗되었는지를 나타냅니다.lastSplit + 140
또는 끝에 가까운 경우 책 길이로 분할 합니다.물론이 논리는 매우 더미입니다. 즉, 단어 또는 문장의 중간에있는 문자를 중지해도 상관 없습니다.
업데이트 : 내가 제공 한 코드는 일반적인 사고 과정이며 반드시 복사 / 붙여 넣기가 아닙니다. 그러나 붙여 넣은 코드에서 다음을 시도 할 수 있습니다.
var fs = require('fs');
var book = fs.readFileSync('./test.txt');
var lastSplit = 0;
function tweet(book) {
var limit = book.length - lastSplit > 140 ? 140 : book.length - lastSplit;
var tweet = book.slice(lastSplit, lastSplit + limit);
lastSplit += limit;
return tweet;
}
while (lastSplit < book.length) {
console.log(tweet(book));
}
업데이트 II : 더미 책을 사용한 작업 코드 (작동 함을 확신시키기 위해!)
function tweet(book) {
var lastSplit = 0;
while (lastSplit < book.length) {
var limit = book.length - lastSplit > 140 ? 140 : book.length - lastSplit;
var tweet = book.slice(lastSplit, lastSplit + limit);
lastSplit += limit;
$('body').append('<p>' + tweet + '</p>');
}
}
// this will generate a dummy string containing numbers from 0-800
tweet(Array.apply(null, {length: 800}).map(Number.call, Number).join(''));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다